【问题标题】:Selecting data from multiple tables using Entity framework, can it cause inconsistence results使用Entity框架从多个表中选择数据,会不会导致不一致的结果
【发布时间】: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);
}

但我担心实体框架将如何获取数据并构造视图模型对象。

  1. 假设用户启动了一个调用 GetCustomer 方法的新对象
  2. 因此实体框架将根据.include 开始选择数据
  3. 假设在实体框架构建数据时,刚刚添加了一条新记录,例如:-

    • 在执行.Include(a => a.SDOrganization) 后,一个新的SDOrganization 带有一个刚刚添加的AssPostalADDress
    • 因此会有一个 AaaPostalAddress 对象在同一对象内没有关联的 SDOrganization。

那么这种情况会发生还是 EF 会处理?

【问题讨论】:

    标签: asp.net-mvc entity-framework-4.1


    【解决方案1】:

    这里没有之前或之后。 EF 读取所有包含和位置并构建查询表达式。 当您对该表达式调用 SingleOrDefault() 时,该表达式将被转换为 SQL 并立即在数据库中执行。

    您要求的是事务隔离级别 - 在并发环境中您从 SQL Server 获取哪些数据:有关该主题的介绍,请参阅此链接:http://msdn.microsoft.com/en-us/library/ms378149.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 2023-03-13
      • 2017-08-18
      • 2016-03-28
      相关资源
      最近更新 更多