我试图设置,可以使用实体框架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>();
}
.....
我总是创建通过我自己的接口的背景下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
返回假IMyDataContext
从GetContext()
在时间我注意到在存储库的重复,并且可以推某些方法到基部存储库: GetAll()
Save()
GetById()
有时,如果我有一致的主键,等等。