Cal*_*tor 5 c# asp.net-mvc entity-framework
如何告诉DBContext的Find方法它应该急切地加载导航属性/实体?
我有以下代码删除与相关辅助实体的关联:
Person primary = db.People.Find(Id);
if (primary == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
// This line is required to load the related entity
db.Entry(primary).Reference("Secondary").Load();
primary.Secondary = null;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我不得不添加这条线db.Entry(primary).Reference("Secondary").Load();以使其正常工作.我理解这是因为实体框架正在使用延迟加载.我可以在Find方法中覆盖它,并通过使用Find方法的Eager版本摆脱额外的行吗?
Ger*_*old 11
急切加载是通过以下Include方法完成的:
db.People.Include(p => p.Secondary)
Run Code Online (Sandbox Code Playgroud)
FirstOrDefault(p => p.Id == id)例如,可以跟随其后.
Find是一种DbSet首先尝试在上下文缓存中查找请求的实体的方法.只有在那里找不到它时,才从数据库中获取实体.
因为(这种特殊的行为Find),Include而Find不能混用.当在缓存中找到根实体时,很难定义要执行的操作,但要包含的实体不是(或仅部分).它们应该从数据库中提取吗?这将意味着Find+ Include将始终有查询数据库所包含的实体,因为它不能依靠本地缓存完成.那会破坏目的Find.或者,如果根实体位于本地缓存中,则应该只找到本地缓存中的实体?这会使方法的结果模糊不清.
在ASP.Net MVC(或Web API)操作方法中,Find几乎没有用处,因为大多数时候,将创建一个新的上下文,并且将从数据库中提取一次实体.换句话说,缓存中没有任何内容可以返回.您可能希望将该方法用于其简洁性,但关于数据库往返的效果与此相同FirstOrDefault().
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |