为db包装dbContext的最佳方法是什么?

时间:2013-09-17 18:02:50

标签: asp.net-mvc-4 dependency-injection castle-windsor

我认为以下内容可能适用于通过构造函数将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();
    }
}

1 个答案:

答案 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
    }
}