1

我正在创建以下存储库方法:-

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 会处理呢?

4

1 回答 1

0

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

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

于 2013-07-12T11:00:26.660 回答