使用Entity框架从多个表中选择数据,会不会导致不一致的结果
Posted
技术标签:
【中文标题】使用Entity框架从多个表中选择数据,会不会导致不一致的结果【英文标题】:Selecting data from multiple tables using Entity framework, can it cause inconsistence results 【发布时间】:2013-07-12 08:55:55 【问题描述】:我正在创建以下存储库方法:-
public AccountDefinition GetCustomer(int id)
var c = entities.AccountDefinitions.Where(p => p.ORG_ID == id)
.Include(a => a.SDOrganization)
.Include(a2 => a2.SiteDefinitions)
.Include(a3 => a3.SDOrganization.AaaPostalAddresses)
.Include(a4 =>
a4.SiteDefinitions
.Select(a5 =>
a5.DepartmentDefinitions
.Select(a6 => a6.SDUsers
.Select(a7 => a7.AaaUser.AaaContactInfoes)
)
)
)
.SingleOrDefault();
return c;
我有以下 Action 方法,它将调用上述存储库方法:-
public ActionResult Details2(int id = 0)
// CustomerDetails cd = repository.GetCustomer(id);
AccountDefinition cd = repository.GetCustomer2(id);
return View("copy",cd);
但我担心实体框架将如何获取数据并构造视图模型对象。
-
假设用户启动了一个调用 GetCustomer 方法的新对象
因此实体框架将根据
.include
开始选择数据
假设在实体框架构建数据时,刚刚添加了一条新记录,例如:-
在执行.Include(a => a.SDOrganization)
后,一个新的SDOrganization
带有一个刚刚添加的AssPostalADDress
因此会有一个 AaaPostalAddress 对象在同一对象内没有关联的 SDOrganization。
那么这种情况会发生还是 EF 会处理?
【问题讨论】:
【参考方案1】:这里没有之前或之后。 EF 读取所有包含和位置并构建查询表达式。
当您对该表达式调用 SingleOrDefault()
时,该表达式将被转换为 SQL 并立即在数据库中执行。
您要求的是事务隔离级别 - 在并发环境中您从 SQL Server 获取哪些数据:有关该主题的介绍,请参阅此链接:http://msdn.microsoft.com/en-us/library/ms378149.aspx
【讨论】:
以上是关于使用Entity框架从多个表中选择数据,会不会导致不一致的结果的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework Core 5 - 在表上引入 FOREIGN KEY 约束可能会导致循环或多个级联路径
CoreData多个NSPersistentContainer实例导致Multiple NSEntityDescriptions +entity unable disambiguate的解决