【问题标题】:What does entity framework .load(MergeOption) do?实体框架 .load(MergeOption) 有什么作用?
【发布时间】:2013-08-03 19:11:27
【问题描述】:

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

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

其中foo 和bar 是生成的实体,bar 具有指向foo 的外键。

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

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


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

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

感谢阅读

【问题讨论】:

    标签: c# linq entity-framework-5


    【解决方案1】:

    .Load() 将数据库中的 IQueryable 查询加载到内存中 - 实际上是 DbContext 相关实体的 Local 属性。

    您可以将此方法用于任何 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); 
    

    加载功能主要有2个原因:

    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);
    

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多