如何使用实体框架上下文与依赖注入?(How to use Entity Framework cont

2019-07-29 06:57发布

我试图设置,可以使用实体框架EDMX模型上下文中的基础信息库类。 我遇到的问题是,我需要找到的是EF EDMX对象方面实现了,所以我可以传递给通过依赖注射构造函数的接口。 我已经使用创建它,并将其存储在HttpContext的,但杀死的能力,单元测试的DataFactory解决此之前得了。 任何帮助,将不胜感激。 谢谢!

public abstract class BaseRepository<T> where T : EntityObject
{
        private MyDataModelContext _dataContext;
        private ObjectSet<T> dbset;

        protected BaseRepository(IObjectContext dataContext)
        {
            _dataContext = dataContext;
            dbset = _dataContext.CreateObjectSet<T>();
        }

    .....

Answer 1:

我总是创建通过我自己的接口的背景下DataContextFactory,并通过了我的资料库,如下所示:

上下文接口:

public IMyDataContext {
    // One per table in the database
    IDbSet<Class1> Class1s { get;set; }
    // etc

    // The standard methods from EF you'll use
    void Add( object Entity );
    void Attach( object Entity );
    void Delete( object Entity );
    void SaveChanges();
}

上下文工厂:

public class MyDataContextFactory : IMyDataContextFactory {
    public IMyDataContext GetContext() {
        // TODO: Use the service locator pattern to avoid the direct instanciation
        return new MyDataContext();
    }
}

上下文工厂接口:

public interface IMyDataContextFactory {
    IMyDataContext GetContext();
}

该库:

public class MyClass1Repository {
    private readonly IMyDataContextFactory factory;
    public MyClass1Repository( IMyDataContextFactory Factory ) {
        // TODO: check for null
        this.factory = Factory;
    }
    public List<MyClass1> GetAll() {
        using ( IMyDataContext db = this.factory.GetContext() ) {
            return db.Class1s.ToList();
        }
    }
    // TODO: Other methods that get stuff
}

然后,当我想测试存储库中,我通过在假IMyDataContextFactory返回假IMyDataContextGetContext()

在时间我注意到在存储库的重复,并且可以推某些方法到基部存储库: GetAll() Save() GetById()有时,如果我有一致的主键,等等。



文章来源: How to use Entity Framework context with dependency injection?