dou*_*ald 13 c# abstract-class entity-framework
我有一种情况,我有4-5个非常相似的类,我想重新考虑使用抽象基类.这背后的想法是允许每个类可以使用的方法,同时遵守DRY原则.
我遇到的问题是这些类是从EF4生成的实体类,每次我尝试改变我的模型时它似乎都会崩溃.
将基类添加到我的EF模型中并使模型中的现有类继承作为基础的最佳/推荐方法是什么?目前我没有问题添加基类,给它一个ID属性,因为它似乎需要,然后创建继承,但EF然后呻吟关于
'Error 3024: Problem in mapping fragments starting at line 18563:Must specify mapping for all key properties (MyBaseType.ID) of the EntitySet MyBaseType.'
在这种情况下,我不希望将基类型持久化到DB,纯粹用作从其继承的所有类共有的基本方法的容器.感觉我在这里错过了一些简单的东西,但我不能为我的生活看到它.
有关如何以这种方式添加基类的任何想法?或者我应该只是在代码中添加基类并以某种方式绕过模型?
编辑:作为进一步的信息,举例说明有3种类型,MortageApplicationForm,BankAccountApplicationForm和CreditCardApplication表格.它们目前存储在3个不同的表中,具有一组不同的字段.我正在尝试做的是创建一个类似'Form'的基类,它将包含公共字段.
在一个简单的层面上,假设每个表都有一个名为'CreditCardFormID','BankAccountFormID'等的主键ID字段.我想做的是创建一个带有属性'ID'的基础'Form'类,用于案例一个表将映射到'CreditCardFormID'和另一个'BankAccountFormID'.
我很高兴在部分类中执行此映射(因为我不想将'ID'持久保存到DB中)我只是想在代码中使用它,因此我可以为LoadForm(int ID)之类的东西编写泛型方法无需为每个实体类型编写大型开关,或为每个实体类型编写特定方法.
我设法通过稍微调整一些东西来找到解决这个问题的方法。首先,我没有时间重新设计模型(我认为这将是最好的解决方案),系统的大部分内容已经使用现有结构开发,此时无法将其全部拆散。
到目前为止,解决方案是创建一个静态帮助程序类来包含业务逻辑,该逻辑在我的示例中是通用的,即 3 种不同的帐户类型。
它与“IAccount”接口相结合,允许帮助程序类将 IAccount 实例作为参数(允许传递任何特定帐户类型)。该接口包含 3-4 个具体类的所有公共属性。值得注意的是,为了创建可以在所有类上调用的通用方法,我无法使用该类特有的任何其他属性。
在辅助方法中,我需要将具体的 XYZEntities 实例切换为更通用的“ObjectContext”对象,然后显式使用“AddObject”等方法,而不是“AddBankAccountForm”、“AddCreditCardForm”等。这涉及到一点点 GetType()'ing 以确保对象被传递到正确的 ObjectSet,但似乎可以按预期工作。
归档时间: |
|
查看次数: |
10603 次 |
最近记录: |