在EF7中使用什么代替DbSet Create()方法,并建议简单地使用新的T()

时间:2016-04-29 17:13:15

标签: c# entity-framework entity-framework-core

我在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(),将来有什么问题吗?

2 个答案:

答案 0 :(得分:3)

我发现没有实现这些方法的原因是实体框架核心(EF7)根本不使用代理。因此,这些方法(为实体创建代理)的附加值消失了。在我看来,实体的默认构造函数是要走的路。

参见讨论:https://github.com/aspnet/EntityFramework/issues/3797

答案 1 :(得分:1)

现在,EF核心supports proxies and lazy loading有了一个DbSet.CreateProxy() extension method。看起来他们更改了名称,以便更清楚地知道其唯一目的是创建代理。

相关问题