簡短的問題:實體框架:添加標屬性,它等於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;
也感謝爲創建擴展特性的想法...將是非常有用的。