2012-12-11 49 views
0

我試圖訪問具有State = Added的實體的Navigational屬性,但Navigational屬性爲null。DBContext,訪問新增實體的導航屬性

using (var myc = new DBTestEntities()) 
    { 
     var cust = new Customer(); 
     cust.CustomerName = "New Customer"; 
     cust.BusinessTypeID = 1; // This is a valid BusinessTypeID present in BusinessType table 

     myc.Customers.Add(cust); 
     // at this point cust.BusinessType is null 
     Console.WriteLine(cust.BusinessType.BusinessTypeName); 
    } 

任何人都可以指導我如何訪問Navigational屬性在這種情況下。

回答

0

myc.Customers.Add(cust); 

後,您可以添加

myc.ChangeTracker.DetectChanges(); 

這將觸發一個稱爲關係修正過程,其中EF同步參與外鍵的所有屬性。如果它尚未處於上下文中,將導致BusinessType對象從數據庫中獲取。

+0

這樣做。我認爲正確的做法是將BusinessType設置爲BusinessTypeID(如TheJoelaut提到的),並在任何地方使用BusinessType導航屬性。但在我的情況下,我將使用BusinessTypeID字段,然後我需要檢查BusinessType。但是,最好有一些選擇,導航屬性應該在閱讀時填充。 – sallushan

0

您需要在您的客戶類中擁有BusinessType屬性。

在那裏,你可以設置Businesstype類似:

cust.BusinessType = (from x in myc.BusinessTypes where x.Id=1 Select x).First(); 
+0

好的,但那麼整個數據庫的上下文,ORM,關係導航等點呢?我錯過了什麼嗎? – sallushan

+0

BTW BusinessType屬性已作爲導航屬性存在 – sallushan

+0

導航屬性是Busniesstype屬性。 BusinessTypeId只是外鍵。 – TheJoeIaut

0

我認爲你需要做的:

myc.SaveChanges(); 

實際提交enitity到數據庫。

+0

但我不想保存更改。 – sallushan