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

标签 c# linq entity-framework-5

我正在尝试将使用 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/

相关文章:

c# - 简化正则表达式或模式

c# - Selenium 与 UWP 应用程序?

c# - 将并行扩展或并行 LINQ 与 LINQ Take 结合使用

asp.net - 'System.Data.Entity.Internal.AppConfig' 的类型初始值设定项引发异常

c# - 如何在 winforms 中使用 EF 进行双向数据绑定(bind)?

entity-framework - 静态构造函数中的 Database.SetInitializer()?

c# - 运行命令并确保它在继续之前结束

c# - 如何使用自定义渲染器在 Xamarin.Forms、Android、iOs、UWP 上更改 slider 的颜色?

c# - 将查询语法中的 LINQ 转换为 lambda 语法

c# - Entity Framework 核心包含(...其中)