我认为以下内容可能适用于通过构造函数将dbcontext注入我的服务层....有没有人有更好的方法? 它似乎工作但_context.EntityName等不会出现在intellisense中,除非我将对象转换为从dbcontext继承的实际类。
public interface IContextFactory:IDisposable
{
DbContext Create();
}
public class ContextFactory<TContext> : IContextFactory where TContext : DbContext, new()
{
private DbContext _context;
public DbContext Create()
{
_context = new TContext();
_context.Configuration.LazyLoadingEnabled = true;
return _context;
}
public void Dispose()
{
_context.Dispose();
}
}
答案 0 :(得分:0)
正如Steven在评论中提到的,你可以直接从你的Composition Root注入DbContext。下面是一个如何使用SimpleInjector的示例。
container.Register<MyDbContext>(
() => new MyDbContext("name=MyDbContext"),
new WebRequestLifestyle(true));
MyDbContext是DbContext的子类:
public class MyDbContext: DbContext
{
public MyDbContext(string connectionString)
: base(connectionString)
{
this.Configuration.LazyLoadingEnabled = true;
}
/* DbSets<SomeEntity> etc */
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//etc
}
}