我有幾個類從一個抽象基類繼承,它包含一些常用的實用程序代碼。我想移動到EF來訪問數據,但我仍然希望對象能夠繼承基類中的通用代碼。 EF類已經從EntityObject繼承,所以我不能讓它們繼承我的基類。什麼是正確的方式來處理這個問題?我的環境是Net 3.5/C#如何獲得實體框架類繼承基類
3
A
回答
5
對不起,如果你看到我以前的帖子 - 我錯過了一些重要的問題。
您可以使用部分類。讓你的部分類有一個內部字段,並帶有你想要的基類實例,並實現所有的方法和屬性(除非它們已經在實體中實現)。如果您嘗試允許使用您的實體類,則可以在您的基類(或部分實體類中)中使用public static implicit operator
,以便無障礙地進行轉換。
如果你有一個叫做MyBaseClass一個抽象基類,你可以這樣做:
public partial class MyEntityClass
{
private MyBaseClass _baseClass;
private MyBaseClass BaseClass
{
get
{
if (_baseClass == null)
{
_baseClass = new MyBaseClass();
}
return _baseClass;
}
}
public string BaseClassString
{
get
{
return BaseClass.BaseClassString;
}
set
{
BaseClass.BaseClassString = value;
}
}
// etc.
public static implicit operator MyBaseClass(MyEntityClass e)
{
return new MyBaseClass() {
Property1 = e.Property1,
Property2 = e.Property2 // etc.
};
}
public static implicit operator MyEntityClass(MyBaseClass b)
{
return new MyEntityClass() {
Property1 = b.Property1,
Property2 = b.Property2 // etc.
};
}
}
2
如果你仍然在使用Visual Studio 2008,我不確定你能否做到這一點(儘管有人請隨時糾正我)。
但是,如果您使用VS2010,那麼您可以使用新的T4模板選項(即使在定位.net 3.5時)。我會做的是讓你的基類從EntityObject類繼承,然後修改用於生成從你的基類繼承的類的t4模板。
如果你仍然在VS2008中,你可能仍然會做同樣的事情,你只需要手動修改生成的CS文件(每次你改變你的模型),哪些將被認爲是可怕的。
相關問題
- 1. 實體框架6 - 基類的繼承和導航屬性
- 2. 如何在實體框架中使用繼承類的字段
- 3. 實體框架多繼承?
- 4. 實體框架 - 繼承
- 5. 實體框架表繼承
- 6. 實體框架和繼承
- 7. 實體框架 - 繼承
- 8. 實體框架繼承
- 9. 實體框架繼承InverseProperty
- 10. 實體框架繼承
- 11. 實體框架4 - 繼承
- 12. 如何使用實體框架繼承?
- 13. 如何檢索基類(實體框架)?
- 14. 實體框架 - 如何爲實體類創建基類?
- 15. 實體框架:直接通過上下文獲得繼承類型
- 16. 如何創建從實體對象繼承的類? (實體框架)
- 17. 如何確定使用實體框架4繼承的實體的子類型?
- 18. 實體框架中的繼承 - 每個具體類的表?
- 19. Java框架類繼承
- 20. 無法獲得繼承類的實例
- 21. 在實體框架中合併類型表和表繼承
- 22. 實體框架繼承:按類型排序/分組?
- 23. 查詢上繼承了實體框架類不起作用
- 24. 實體框架 - 使用類繼承創建模型
- 25. 實體框架同時多個繼承類型
- 26. 實體框架生成的類型不是從EntityObject繼承的
- 27. 無法保存實體框架繼承的類型
- 28. 手動設置實體框架的表類型繼承
- 29. 實體框架的繼承問題(每種類型的表)
- 30. 實體框架繼承 - 只提取父類型
我的解決方案,同時有點乏味,確實在VS2008的工作,你不需要改變任何生成的代碼。感謝提示,儘管 - 在VS2010中更好! – Andrew 2010-09-17 19:18:09
@Andrew:是的,這是一個非常有趣的方法。然而,如果你有一個擁有100個實體的模型,那麼單調乏味的描述就會輕描淡寫。雖然,您也可以使用T4模板或CodeSmith模板來生成部分實體。 – CodingGorilla 2010-09-17 19:33:20