我有一个枚举:
public enum EnumSample{
Setup = 1,
Pending = 7
}
我有一个存储在数据库中的实体(我使用EF),其EnumSample
属性设置为EnumSample.Pending
。我查询时,数据库将此值反映为7
。但是,当我从C#中检索相同的实体时(使用EF),我得到了一个不正确的类型映射(当我得到Setup
时,我得到Pending
)。所有ID都经过验证。截图如下。可能导致这种情况的原因是什么?
更新
重启应用程序让我得到了我的期望 - 问题是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;
}
我需要的行为是EventService
和NotificationService
具有相同的AppContext
实例,但在请求之间,上下文被处理掉,我得到新的状态/新实例。
答案 0 :(得分:2)
PerThreadLifetimeManager
并不保证每个请求都由不同的线程提供服务。默认情况下,Unity没有每个请求的生命周期管理器。您需要安装一个nuget包Unity.MVC,它包含一个新的内置生命周期管理器:PerRequestLifetimeManager
。
@ SB2055有关详细信息,请参阅this answer。