0

我在想像下面这样的东西可能可以通过构造函数将 dbcontext 注入到我的服务层......有没有人有更好的方法?它似乎可以工作,但是 _context.EntityName 等不会出现在智能感知中,除非我将对象转换为从 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();
    }
}
4

1 回答 1

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
    }
}
于 2013-09-19T16:47:36.627 回答