2012-12-16 61 views
2

我有一個基類,我將要繼承我的模型定製由實體框架生成的模型類

public class Employee : BaseModel 
{ 

} 

在這種BaseModel我有幾個屬性和一些默認的實現是需要爲每個創建的應用程序模型提供。

當我計劃遷移到實體框架,我如何使用EF生成的模型具有我的方法和屬性也從BaseModel。

不過,我已經從生成的類中刪除了EntityObject和註釋掉在每個屬性相關實施像

//ReportPropertyChanging("id"); 
        //_id = StructuralObject.SetValidValue(value); 
        //ReportPropertyChanged("id"); 

請建議,如果這是一個正確的做法還是有處理這個正確的方式種情景。

+0

您應該使用T4模板。另請閱讀本文:http://stackoverflow.com/questions/6064138/how-to-define-common-propertyies-for-all-entities-in-entity-framework –

回答

1

挑剔OO純粹主義者說:你的域中的所有類有一個基類是反模式。遵守面向對象原則的類(如單一責任,Liskow)不可能都具有相同的基類。如果不知道你的基類,我敢打賭,共同的屬性必須處理普通的數據庫字段或一些實體框架實現,所以基類也打破了持久性的無知。

實體框架大師(誰???)說:你最好在使用數據庫優先的時候不要使用基類。或者:當你真的需要一個基類時:先工作代碼並忽略映射中的基類,即不映射繼承。請注意,DbContext API是首選的EF API(但您也可以使用db-first)。

實用主義者說道:如果這是可行的話使用接口。每個班級都要一次又一次地實施它是一件令人討厭的事情,但是你不會破壞面向對象的原則。這些原則是有原因的。遲早,打破他們將阻礙(但可能不會阻止)你。

+0

請注意,我有共同的屬性稱爲ID和有共同的功能,將使實體的變化被記錄等等。所以我希望這不會違反任何模式。如果可能,請在實體框架中建議 – Saravanan

+0

也許您應該向我們展示更多詳細信息,以便我們能夠對此進行評估。如果您使用DbContext(POCO)API,則您的對象不會參與更改跟蹤。 EF將處理該問題。 –