【发布时间】:2011-11-24 16:52:17
【问题描述】:
我有 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.'
在这种情况下,我不希望将基本类型持久化到数据库中,纯粹用作所有继承自它的类共有的基本方法的容器。感觉好像我在这里遗漏了一些简单的东西,但我一辈子都看不到它。
关于如何以这种方式添加基类的任何想法?或者我应该只是在代码中添加基类并以某种方式绕过模型?
编辑: 作为进一步的信息,举一个例子,其中有 3 种类型,MortageApplicationForm、BankAccountApplicationForm 和 CreditCardApplication 表格。它们当前存储在 3 个不同的表中,具有一组不同的字段。 我正在尝试做的是创建一个说'Form'的基类,其中将包含公共字段。
简单来说,假设每个表都有一个名为“CreditCardFormID”、“BankAccountFormID”等的主键 ID 字段对于一个表的情况,将映射到“CreditCardFormID”和另一个“BankAccountFormID”。
我很高兴在部分类中进行此映射(因为我不想将“ID”保留到 DB)我只是想在代码中使用它,因此我可以为 LoadForm( int ID) 无需为每种实体类型编写巨大的开关,或为每种实体类型编写特定方法。
【问题讨论】:
-
table per type inheritance mapping scenario 是否适用于您的方案?
-
可能,我会更详细地调查链接。目前,4-5 个类中的每一个都有自己的实体类型,并在我所追求的东西中定义了一个通用的基本类型。问题是它们已经映射到数据库中的不同表,而现有数据会使破坏和重新构造数据本身变得很棘手。
-
这似乎是个坏主意,除非基础表结构更改为匹配...
标签: c# entity-framework abstract-class