【发布时间】:2018-02-23 17:50:42
【问题描述】:
我在使用 EF 缓存数据时遇到了一个奇怪的问题,并且只能在创建数据库连接时获取值。
这是一个问题,因为数据库上下文是在承包商身上注入的。
我已将 LazyLoadingEnabled 设置为 false。
EF 已首先设置为数据库,这将是一些将被更改的内容,因此它首先编码。
我正在使用 autofac 进行依赖注入。
我知道下面的演示很奇怪,但它是最简单的解释方式。
因此,如果我调用以下代码,但如果我在进入 SQL 数据库的每个 GetFooById 上放置一个断点并更改 foo 表中的值,它将不会加载新的更改,它将加载值,如他们在我开始之前。
var item1 = _fooService.GetFooById(1);
var item2 = _fooService.GetFooById(1);
var item2 = _fooService.GetFooById(1);
我想知道如何使 EF 始终从数据库中获取最多的更新值。 我的 foo 服务看起来像这样
private readonly DBEntities _dbContext;
public FooService(DBEntities dbContext)
{
_dbContext= dbContext;
}
public Foo GetFooById(int id)
{
return _dbContext.Foo.First(x => x.Id== id);
}
autofac 看起来像
builder.RegisterAssemblyTypes(ThisAssembly)
.Where(t => t.Name.EndsWith("Service"))
.WithParameter("dbContext", new DBEntities())
.AsImplementedInterfaces();
【问题讨论】:
-
请显示您的 DI 启动代码(特别是注册您的
DBContext的部分)并说明这是什么类型的应用程序(控制台、WPF、ASP.NET MVC 等)。 -
你最好按照stackoverflow.com/questions/10777630/…重新设计你的服务
标签: c# entity-framework dependency-injection autofac