2017-04-20 4 views
3

deserialisiert in Typ war habe ich eine Enum:Enum richtig in DB gespeichert, aber nicht richtig in C#

public enum EnumSample{ 
    Setup = 1, 
    Pending = 7 
} 

Ich habe eine Entität (ich verwende EF) in der Datenbank mit seiner EnumSample Eigenschaft gespeichert auf EnumSample.Pending. Die Datenbank gibt diesen Wert als 7 zurück, wenn ich abfrage. Wenn ich dieselbe Entität jedoch innerhalb von C# (mit EF) abrufe, bekomme ich eine falsche Typzuordnung (ich bekomme Setup, wenn ich Pending bekommen sollte). Alle IDs werden überprüft. Screenshot unten. Was könnte das verursachen?

enter image description here

UPDATE

die App neu starten wird mir, was ich erwarte - das Problem ist, dass die Instanz von DbContext klebt um zwischen Anfragen. Ich kann using var db = new AppContext tun, und es funktioniert gut.

Ich habe das auf meinem UnityContainer konfiguriert folgende:

container.RegisterType<AppContext>(new ContainerControlledLifetimeManager()); 

Ich habe versucht, verschiedene Lebensdauer Manager - PerHttpRequestLifetimeManager löst nicht pro andere Führung ich gesehen habe.

Ein Beispiel für eine Service-Schicht-Methode:

public class EventService : BaseService 
    { 

    public readonly AppContext _db; 

    private readonly NotificationService _notificationService; 

    public EventService(AppContext db, NotificationService notificationService) 
    { 
     _db = db; 
     _notificationService = notificationService; 
    } 

Das Verhalten, das ich brauche, ist, dass EventService und NotificationService die gleiche Instanz von AppContext haben, sondern dass zwischen den Anforderungen, wird der Kontext angeordnet ist und ich frischen Zustand erhalten/neue Instanz

+0

Können Sie vielleicht Profiler oder Extended Events verwenden und sehen, wie die von Entity Framework erzeugte Anfrage tatsächlich aussieht? Wir könnten es dann verwenden, um zu überprüfen, ob es das gleiche Ergebnis liefert wie das, mit dem Sie die Datenbank überprüft haben. – mwilczynski

+0

Verwenden Sie Code zuerst? – vendettamit

+0

@vendettamit Ich bin. Ich stelle fest, dass ich, wenn ich die App neu starte, bekomme, was ich erwartet habe. Ich glaube, dass es etwas mit einem abgestandenen dbContext zu tun hat ... – SB2055

Antwort

2

PerThreadLifetimeManager garantiert nicht, dass jede Anfrage von einem anderen Thread bedient wird. Unity verfügt standardmäßig nicht über den Manager für die Anforderungslebensdauer. Sie müssen ein Nuget-Paket Unity.MVC installieren, das über einen neuen integrierten Lifetime Manager verfügt: PerRequestLifetimeManager.

@ SB2055 Weitere Informationen finden Sie unter this answer.

+0

Das war genau das. Du bist unglaublich - danke für die Hilfe. – SB2055