C# 枚举在DB中正确存储,但在C中未正确反序列化为类型#
我有一个枚举:C# 枚举在DB中正确存储,但在C中未正确反序列化为类型#,c#,asp.net,entity-framework,enums,ef-code-first,C#,Asp.net,Entity Framework,Enums,Ef Code First,我有一个枚举: public enum EnumSample{ Setup = 1, Pending = 7 } 我在数据库中存储了一个实体(我正在使用EF),其EnumSample属性设置为EnumSample.Pending。当我查询时,数据库将此值反映为7。但是,当我从C#中检索相同的实体时(使用EF),我得到了一个不正确的类型映射(我得到了设置,而我应该得到挂起)。所有ID都经过验证。下面是截图。这可能是什么原因造成的 更新 重启应用程序让我得到了我所期望的结果——问
public enum EnumSample{
Setup = 1,
Pending = 7
}
我在数据库中存储了一个实体(我正在使用EF),其EnumSample
属性设置为EnumSample.Pending
。当我查询时,数据库将此值反映为7
。但是,当我从C#中检索相同的实体时(使用EF),我得到了一个不正确的类型映射(我得到了设置
,而我应该得到挂起
)。所有ID都经过验证。下面是截图。这可能是什么原因造成的
更新
重启应用程序让我得到了我所期望的结果——问题是dbContext的实例在请求之间卡住了。我可以使用var db=new-AppContext来执行,而且效果很好
我在我的UnityContainer
上配置了以下内容:
container.RegisterType<AppContext>(new ContainerControlledLifetimeManager());
我需要的行为是EventService
和NotificationService
具有相同的AppContext
实例,但在请求之间,上下文被释放,我得到了新的状态/新实例。PerThreadLifetimeManager
不保证每个请求都由不同的线程提供服务。默认情况下,Unity没有每个请求的生命周期管理器。您需要安装一个nuget软件包,该软件包具有一个新的内置生命周期管理器:PerRequestLifetimeManager
@SB2055请参阅以了解更多详细信息。您是否可以使用探查器或扩展事件,并查看实体框架生成的查询的实际外观?然后,我们可以使用它来验证它是否会产生与您在数据库中检查时使用的结果相同的结果。您是先使用代码吗?@vendettamit我是。我发现,如果我重新启动应用程序,我会得到我期望的结果。我相信这与过时的dbContext有关…您确定您不仅仅是自己设置属性吗?请在setterSure上添加一个断点,继续!!如果我不是,那么肯定会有人来评论它。就是这样。你太棒了,谢谢你的帮助。
public class EventService : BaseService
{
public readonly AppContext _db;
private readonly NotificationService _notificationService;
public EventService(AppContext db, NotificationService notificationService)
{
_db = db;
_notificationService = notificationService;
}