gpt4 book ai didi

entity-framework - DbSet.Create 与 new Entity() 的区别

转载 作者:行者123 更新时间:2023-12-03 06:00:22 27 4
gpt4 key购买 nike

我对是否使用 DbSet.Create 还是简单地新建一个实体并添加它有点困惑。我不太明白使用 DbSet.Create 的后果。

我知道 DbSet.Create 将创建一个代理版本(如果适用),但我不太明白这意味着什么。我为什么关心?在我看来,空的代理类并不比非代理类更有用,因为没有与延迟加载相关的实体。

你能告诉我除了明显的区别之外的区别吗?你为什么要关心?

最佳答案

使用 DbSet<T>.Create() 的场景有意义的是将现有实体附加到上下文,然后利用相关实体的延迟加载。示例:

public class Parent
{
public int Id { get; set; }
public virtual ICollection<Child> Children { get; set; }
}

public class Child
{
public int Id { get; set; }
public string Name { get; set; }
}

那么以下内容就可以工作:

using (var context = new MyDbContext())
{
var parent = context.Parents.Create();
parent.Id = 1; // assuming it exists in the DB
context.Parents.Attach(parent);

foreach (var child in parent.Children)
{
var name = child.Name;
// ...
}
}

这里触发了子项的延迟加载(可能会产生空集合,但不会 null )。如果您替换 context.Parents.Create()通过new Parent() foreach 循环会崩溃,因为 parent.Children总是null .

编辑

另一个示例在这里(填充新实体的外键属性,然后在新实体插入数据库后延迟加载导航属性):Lazy loading properties after an insert

关于entity-framework - DbSet.Create 与 new Entity() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311949/

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