枚举在DB中正确存储但未在C#中正确反序列化为类型

时间:2017-04-20 19:49:31

标签: c# asp.net entity-framework enums ef-code-first

我有一个枚举:

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

我有一个存储在数据库中的实体(我使用EF),其EnumSample属性设置为EnumSample.Pending。我查询时,数据库将此值反映为7。但是,当我从C#中检索相同的实体时(使用EF),我得到了一个不正确的类型映射(当我得到Setup时,我得到Pending)。所有ID都经过验证。截图如下。可能导致这种情况的原因是什么?

enter image description here

更新

重启应用程序让我得到了我的期望 - 问题是dbContext的实例在请求之间徘徊。我可以做using var db = new AppContext而且效果很好。

我在UnityContainer上配置了以下内容:

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

我已经尝试了各种不同的终身经理 - PerHttpRequestLifetimeManager并没有解决我见过的其他指导。

服务层方法的一个示例:

   public class EventService : BaseService
   {

    public readonly AppContext _db;

    private readonly NotificationService _notificationService;

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

我需要的行为是EventServiceNotificationService具有相同的AppContext实例,但在请求之间,上下文被处理掉,我得到新的状态/新实例。

1 个答案:

答案 0 :(得分:2)

PerThreadLifetimeManager并不保证每个请求都由不同的线程提供服务。默认情况下,Unity没有每个请求的生命周期管理器。您需要安装一个nuget包Unity.MVC,它包含一个新的内置生命周期管理器:PerRequestLifetimeManager

@ SB2055有关详细信息,请参阅this answer