2013-03-26 73 views
1

在我們的數據庫中,我們有叫做LookUps的表(通用,沒有稱爲查找表) - 1. MaritalStaus(LookUpId,description)。 2. TypeOfRelations(LookUpid,description) 3.標題(LookUpid,description)實體框架代碼第一個表層次

什麼是最好的方式來定義這種表的模型。我在想,如果我創建一個通用類,如

public class LookUp<T> 
{ 
//where T is one of lookup kind 
} 

public class MaritalStatus : LookUp 
{ 
// no field 
} 

//對於標題和關係類型是相同的。

但我很困惑如何把它放在一起 1.我必須匹配所有的類型與表等配置? 2.通用查找在數據庫中沒有表? 歡迎任何好的教程或建議。 謝謝, Daljit

回答

1

你正在混合一些概念,我認爲。我相信你打算在下面的方案只使用一個類你查找表的訪問:

var maritalStatus = new Lookup<MaritalStatus>(); 
var typeOfRelations = new Lookup<TypeOfRelations>(); 

,然後離開EF弄清楚如何應對數據的讀取和寫入使用並從數據庫通用Lookup<T>類。這種方法對於EF來說是不可能的,因爲不能使用泛型類型的DbSet<T>,因爲EF不知道事先要讀取和寫入的表(T可能是什麼)。

其中一種方法是在EF上使用Table per Type繼承。如果您可以更改數據庫模式,那麼您可以創建一個父LookUp表,並讓其他LookUps全部從父代中退出,然後您可以使用EF的Table per Type功能,並在查詢期間調用.OfType<T>擴展方法。

檢查莫爾塔扎Manavi的文章很好的解釋瞭如何做到這: http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt.aspx

如果您不能更改數據庫模式,那麼你可以每個具體類的方法使用表中得到通過無父類的具體表,也在Morteza Manavi的文章中描述: http://weblogs.asp.net/manavi/archive/2011/01/03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines.aspx

祝你好運。

+0

謝謝,這是非常好的答案和教程是非常豐富。非常感謝。有時候最好知道不能做什麼。 – daljit 2013-03-26 14:05:20