gpt4 book ai didi

c# - Entity Framework .load(MergeOption) 做什么?

转载 作者:行者123 更新时间:2023-11-30 17:52:54 25 4
gpt4 key购买 nike

我正在尝试将使用 Entity Framework 4 的大型应用程序升级为使用 Entity Framework 5。我发现了这样一个函数:

public FooModel(FooEntity foo)
{
_foo = foo;
_foo.bars.Load(System.Data.Objects.MergeOption.OverwriteChanges);
}

在哪里foobar是生成的实体,带有 barfoo 的外键.

EF5 似乎不再有 .Load(MergeOption)功能,我以前从未见过。有谁知道它的作用以及它的等价物是什么?

https://stackoverflow.com/a/13178313/784908建议Load是 DbContext 的一部分 - 但我的实体容器继承自 DbContext,但仍然不可用


我最好的猜测是它用于外键的急切加载(我需要这样做,在请求中多次创建和处理上下文,并且不保证它会存在/附加时 FooModel被使用)

Entity Framework - eager loading of related entities显示我应该使用 .Include() ,但该功能在实际实体上似乎不可用(我认为该术语是“物化查询”?)

感谢阅读

最佳答案

.Load()加载 IQueryable从数据库查询到内存 - 事实上,Local DbContext 相关实体的属性。

您可以将此方法用于任何 IQueryable 集合,而不仅仅是 DbContext。举例如下:

var q = db.Products.Include("Category").ToList();
q.Load(); // -> you can't!

// ------------

db.Products.Include("Category").Load(); // It's OK!

// This will NOT query the database, just looks in-memory data.
var p = db.Products.Local.Single(id);

// ------------

var q = db.Products.Include("Category").ToList();
q.AsQueryable().Load(); // -> It's OK!

// This also will NOT query the database, just looks in-memory data.
var p = db.Products.Local.Single(id);

加载函数主要用于两个原因:

1) 从 Db 中检索部分数据到内存并使用它们:

db.Products.Include("Category").Where(p => p.CatId == 10).Load();

2) 能够使用 L2E 不支持的 Linq-to-Objects 方法(如 .ToString() 等)- 因为 DbContext 实体的 Local 属性是 ObservableCollection<T>实现IEnumerable ,就像 L2O 对象一样:

db.Products.Include("Category").Where(p => p.CatId == 10).Load();
string subName = db.Products.Local.Find(id).SubString(0, 4);

关于c# - Entity Framework .load(MergeOption) 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18001862/

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