在EF7中使用什麼代替DbSet Create()方法,並建議簡單地使用新的T()

c# entity-framework entity-framework-core

我在ef 5應用程序中使用generic repository pattren。 IDbSet有一個create()方法,在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();
    }
}

我的問題是,為什麼Create();在EF7的DbSet刪除了該方法(請注意,在EF核心中也刪除了IDbSet

我發現了這個問題: 創建()與新T() ,如果我使用新的T(),將來有任何問題嗎?

一般承認的答案

我發現沒有實現這些方法的原因是實體框架核心(EF7)根本不使用代理。因此,這些方法(為實體創建代理)的附加值消失了。在我看來,實體的默認構造函數是要走的路。

請參閱討論: https//github.com/aspnet/EntityFramework/issues/3797



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow