我在generic repository
5应用中使用ef
pattren。
create()
中有一个IDbSet
方法,在ef7的DbSet
中不存在。
EF5中Create()
方法的说明如下:
为此集的类型创建实体的新实例。注意 此实例未添加或附加到集合。实例 如果基础上下文配置为,则返回将是代理 创建代理,实体类型符合要求 创建代理。
代码示例:
public interface IRepository<T> where T : IDisposable {
T Create();
}
public class Repository<T> : IRepository<T> where T : IDisposable {
protected IUnitOfWork uow;
protected IDbSet<T> entity;
public Repository(IUnitOfWork uow) {
this.uow = uow;
this.entity = uow.Set<T>();
}
public T Create() {
return entity.Create();
}
}
我的问题是,为什么在EF7的Create();
中删除了DbSet
方法(注意在EF核心中也删除了IDbSet
)
我找到了这个问题:Create() Versus new T(),如果我使用新的T(),将来有什么问题吗?
答案 0 :(得分:3)
我发现没有实现这些方法的原因是实体框架核心(EF7)根本不使用代理。因此,这些方法(为实体创建代理)的附加值消失了。在我看来,实体的默认构造函数是要走的路。
答案 1 :(得分:1)
现在,EF核心supports proxies and lazy loading有了一个DbSet.CreateProxy()
extension method。看起来他们更改了名称,以便更清楚地知道其唯一目的是创建代理。