我已經使用的其他ORM,如扭矩,推進或學說,爲每個實體生成2個類別:例如,BaseCustomer和客戶。 客戶從BaseCustomer繼承,你可以重寫方法或添加您自己的。爲什麼實體框架將實體生成爲部分類?
但實體框架生成部分類。您可以添加方法,但不是覆蓋他們(構造函數或訪問方法)。
這是爲什麼?
我想它更容易爲一個代碼生成與部分類工作,它禁止開發人員與變更跟蹤代碼搞亂,但是......
是不是外匯基金的缺點,因爲它限制了開發者的自由?
我已經使用的其他ORM,如扭矩,推進或學說,爲每個實體生成2個類別:例如,BaseCustomer和客戶。 客戶從BaseCustomer繼承,你可以重寫方法或添加您自己的。爲什麼實體框架將實體生成爲部分類?
但實體框架生成部分類。您可以添加方法,但不是覆蓋他們(構造函數或訪問方法)。
這是爲什麼?
我想它更容易爲一個代碼生成與部分類工作,它禁止開發人員與變更跟蹤代碼搞亂,但是......
是不是外匯基金的缺點,因爲它限制了開發者的自由?
我想不出一個特別好的理由來覆蓋EF方法或屬性。如果您不想要某個特定的屬性並希望提供您自己的屬性,請不要將其包含在實體模型中。我承認,構造函數更多的是一個問題,儘管你可以用工廠方法來解決它,它可以實現你想要的。
我想,所有的設計決定必須權衡 - 我與波輪工作,喜歡它的模式也,在這方面。然而,EF似乎很適合.NET範例,而且我發現部分類「足夠好」用於在需要時擴展實體。
繼承是常見的濫用,實際上比限制部分類以上。作爲設計主體,類應該可以擴展,部分類比繼承類更好。
至於覆蓋的自動實體屬性/方法,你可以隨時使用new關鍵字(如果你使用C#):
public MyCustomer : Customerbase {
public new string FirstName { ... }
}
但是,任何類從MyCustomer
繼承會回到默認的FirstName
Customer
。
EF的默認代碼生成是原樣的。你不能修改直接行爲。你只能在部分類中添加你自己的行爲。構造函數沒有問題,因爲據我所知EF沒有爲實體創建構造函數 - 它使用默認構造函數。
在EF 4中,這整個變化很大。您可以關閉默認實體生成器並改爲使用T4模板。 T4模板只是另一個腳本文件,您可以修改並添加所需的任何更改。
如果你想更好的解釋爲什麼做這樣你應該問ADO.NET的球隊,但通常局部類是應對整個.NET框架生成的代碼,以便他們可能保持它的一致性常見的方式。