我們使用C#MVC .NET4。 EF5(CodeFirst)。無基類的EntityFramework和TPT
我們正在嘗試構建一個動態允許用戶將附加屬性「附加」到任何實體的系統。
假設我們有ProductClass和Products。對於每個實體,我們都有一些「標準」字段,但用戶可能決定將任意屬性添加到任何記錄中,如鍵值對,如產品123具有「StockMax」=「10」。我們會創建單個「AttachedProperty」實體/類(在SQL中可以轉換爲PK = {ParentTable,ParentId,PropertyKey}的表) )。這樣我們會爲所有實體的附屬屬性保留一個類(這對建立用戶界面非常有用)。
我知道我可以做到,在EF由具有基礎類:
class EntityWithAttachableProperty {
public System.Guid Id {get;set;}
public ICollection<MyProperty> MyProperties {get;set;}
}
然後從該類繼承我的實體,如:
class Product : EntityWithAttachableProperties {
public string name {get;set;}
etc
}
我的問題是,我不想爲此使用繼承。我將被迫在邏輯上將不相關的事物分組。我也會在SQL中獲得一個我不需要的龐大的EntityWithAttachableProperties表。
那麼,有沒有一種方法可以在沒有基類的情況下完成TPT? (可能通過模型構建器)。這樣,我會得到類是這樣的:
class Product {
public System.Guid Id {get;set;}
public string name {get;set;}
public ICollection<MyProperty> MyProperties {get;set;}
etc
}
class ProductClass {
public System.Guid Id {get;set;}
public string Classname {get;set;}
public ICollection<MyProperty> MyProperties {get;set;}
etc
}
需要注意的是,當我做到這一點EF試圖PRODUCT_ID和ProductClass_Id添加到MyProperties表。
添加'ID'列以允許表之間的關係。 –
考慮使用NoSql數據庫。使用旨在完成這項工作的適當工具是有益的。 –
@Bob,據我所知,但這意味着我最終會在表中輸入+10 _id列。我想有一個鑑別器。 –
rufo