2009-11-23 75 views
0

簡短的問題:實體框架:添加標屬性,它等於FK ID

基本上我想一個標量屬性添加到我的實體,其保持FK實體的ID。

我曾試圖迄今做的事:

我已經試過到目前爲止被加入標量屬性(被稱爲childID的),並將其映射到數據庫中的匹配列。現在你可以想象,當我嘗試這樣做時,我會得到一些異常,因爲實體框架抱怨FK id在兩個地方被管理,一次是通過x.ChildId管理,另一個通過x.Child.ChildId管理。

現在我得到它爲什麼這樣做,但我需要一些爲什麼能夠有一個標量屬性,它會自動填充ChildId。

什麼我知道我可以做,但真的不想:

我意識到,我可以寫一個LINQ查詢,做類似如下(其中我已經實現了部分的另一半類,並增加了那裏叫childID的)特性:

from x in db.Parent 
select new Parent { ParentName = x.ParentName, ..., ChildId = x.Child.ChildId } 

但是,這是非常混亂的,特別是當我有一個返回父對象30餘個查詢,這個映射就需要重複每個查詢...

此外,我意識到,我已執行的查詢後,我會去是這樣的:

var childId = parent.Child.Id; 

但這將導致無論是一個額外的查詢被觸發,或者如果我主動加載的孩子,在這兩種情況下我將被拉出了更多的數據比我需要的時候我只想要ID ...

所需要的最終結果是:

那麼,如何避開這些限制的,這樣我可以寫我的查詢是這樣的(或類似的東西):

from x in db.Parent 
select x 

而且有它,這樣我可以去:

var childId = parent.Child.Id; //Where in this case the only property retrieved would be the Id 
//Or 
var childId = parent.ChildId; 

乾杯 安東尼

編輯:

嘿感謝您的答覆...

我只是也爲自己弄清楚了這一點。基本上我在想,如果EF支持延遲加載,它必須在某處存儲ID。然後點擊它,它必須是在參考......因此,對於我來說,制定出爲類似:

destination.PlanTypeId = (int)source.PlanTypeReference.EntityKey.EntityKeyValues[0].Value; 

也感謝爲創建擴展特性的想法...將是非常有用的。

回答

1

您是否嘗試過使用parent.ChildReference.EntityKey?它不需要被加載並且持有FK。你可以編寫擴展方法來讓密鑰更容易。

相關問題