gpt4 book ai didi

c# - 在 EF7 中使用什么代替 DbSet Create() 方法,建议简单地使用 new T()

转载 作者:太空狗 更新时间:2023-10-29 20:16:15 26 4
gpt4 key购买 nike

我在 ef 5 应用程序中使用 generic repository pattren。IDbSet中有一个create()方法,ef7的DbSet中没有。

EF5中Create()方法说明如下:

Creates a new instance of an entity for the type of this set. Note that this instance is NOT added or attached to the set. The instance returned will be a proxy if the underlying context is configured to create proxies and the entity type meets the requirements for creating a proxy.

代码示例:

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 中被删除(注意 IDbSet 也在 EF 核心中被删除)

我发现了这个问题:Create() Versus new T() ,如果我使用 new T() 以后会有什么问题吗?

最佳答案

Microsoft.EntityFrameworkCore.Proxies NuGet 包现在为 EF Core 实体提供代理。这些代理 support lazy loading来自 2.1 版和 more efficient change tracking (与 POCO 相比)从 5.0 版开始。

名称已从 DbSet<T>.Create() 更改为至 DbSet<T>.CreateProxy() 更清楚地表明它的唯一目的是创建代理。如果您不需要代理类,那么只需 new T()确实是正确的做法。

请注意,您必须 opt in to the proxy features你想使用,例如UseChangeTrackingProxies和/或 UseLazyLoadingProxies , 在创建 DbContext 时。

关于c# - 在 EF7 中使用什么代替 DbSet Create() 方法,建议简单地使用 new T(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36944024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com