2013-07-12 9 views
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; 
} 

和我有以下操作方法,它會調用上述庫方法: -

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),新SDOrganizationAssPostalADDress這裏只是增加
    • 所以會有一個AaaPostalAddress對象在同一對象內沒有關聯的SDOrganization。

所以可能這種情況發生,或者EF會處理這個問題?

回答

0

這裏沒有之前或之後。 EF讀取所有包含和wheres並構建查詢表達式。 當您在該表達式上調用SingleOrDefault()時,該表達式將轉換爲SQL並在數據庫中立即執行。

你問什麼是事務隔離級別 - 你得到了什麼數據從SQL Server早在併發環境:請參閱此鏈接對這樣一個話題介紹:http://msdn.microsoft.com/en-us/library/ms378149.aspx

相關問題