當我們在EFv4 EDM圖中有兩個實體並且在數據庫中只有一個表(例如具有表Documents和實體發票和Qoute)時,表Documents具有documentTypeId列作爲鑑別器,並將此列設置爲EDM中的鑑別器(在表映射中),我們如何在代碼中讀取此屬性的值?訪問用於將實體映射到EFv4中的表中的屬性
我們不能給它賦值,因爲EF在底層爲我們做了它(基於我們在條件的表映射中輸入的內容),但不知何故我不明白爲什麼我們也不允許閱讀它。
當我們在EFv4 EDM圖中有兩個實體並且在數據庫中只有一個表(例如具有表Documents和實體發票和Qoute)時,表Documents具有documentTypeId列作爲鑑別器,並將此列設置爲EDM中的鑑別器(在表映射中),我們如何在代碼中讀取此屬性的值?訪問用於將實體映射到EFv4中的表中的屬性
我們不能給它賦值,因爲EF在底層爲我們做了它(基於我們在條件的表映射中輸入的內容),但不知何故我不明白爲什麼我們也不允許閱讀它。
Imo此屬性已被映射,因此您不能再映射它。它用於確定物化實體的類型。你爲什麼需要這樣的專欄。通常它是足夠使用is
運營商,如:
var document = context.Documents.GetById(id);
if (document is Invoice)
{
...
}
如果你只需要選擇亞型可以使用OfType擴展方法,如:
var invoices = context.Documents.OfType<Invoice>().ToList();
你也不需要設置時,該值添加新實體,因爲您正在添加子類型 - 發票或報價。
編輯:
當我從您的評論理解你不需要在查詢這些信息。在這種情況下,你不需要映射它。只需使用實體的部分類並添加將返回字符串的自定義屬性。聽起來像愚蠢的解決方案,但實際上它會是最簡單的解決方案。
Discriminator列應該是映射元數據的一部分,所以在T4模板生成實體的情況下,可以更新模板以便爲您生成此類屬性。
您不允許將該列添加爲EDM圖中的屬性嗎? – StriplingWarrior 2011-02-13 16:16:22
不,它會導致一個衆所周知的錯誤「條件成員」XY「,並且映射爲」IsNull = False「以外的條件。請刪除XY上的條件或將其從映射中移除。 – mare 2011-02-13 16:26:17