首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架-抽象基类而不映射到DB表

实体框架-抽象基类而不映射到DB表
EN

Stack Overflow用户
提问于 2011-11-07 16:31:32
回答 2查看 11.2K关注 0票数 13

我有一种情况,我有4-5个非常相似的类,我想重新考虑使用抽象基类。这背后的想法将是允许方法,可以使用的每一个类别,同时坚持干燥的原则。

我遇到的问题是,这些类是从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”,其中包含公共字段。

简单地说,假设每个表都有一个主键ID字段,名为'CreditCardFormID‘、'BankAccountFormID’等等--我想要这样做--创建一个带有属性'ID‘的基类,对于一个表,这个类将映射到'CreditCardFormID’和另一个'BankAccountFormID‘。

我很乐意在部分类中完成这个映射(因为我不想将'ID‘保存到DB中)--我只是想在代码中使用它,这样我就可以为诸如LoadForm(int )这样的事情编写通用方法,而无需为每种实体类型编写巨大的开关,或者为每个实体类型编写特定的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-24 08:52:17

我通过稍微调整一些东西,设法找到了这方面的工作。首先,我没有时间重新设计这个模式(我认为这是最好的解决方案),太多的系统已经用现有的结构开发出来,无法在这一点上把它全部拆散。

到目前为止,解决方案是创建一个静态助手类,以包含业务逻辑,这在我的示例中是通用的,在我的示例中是3种不同的帐户类型。

这与一个' IAccount‘接口结合在一起,允许助手类将一个IAccount实例作为参数(允许传递任何特定的帐户类型)。这个接口包含了3-4个具体类中的所有公共属性。需要注意的是,为了创建泛型方法(我可以调用所有类),我无法使用该类特有的任何其他属性。

在helper方法中,我需要将具体的XYZEntities实例转换为一个更通用的'ObjectContext‘对象,然后使用诸如'AddObject’等方法,而不是'AddBankAccountForm‘、'AddCreditCardForm’等方法。这涉及到少量的GetType()'ing,以确保将对象传递给正确的ObjectSet,但似乎可以按需要工作。

票数 4
EN

Stack Overflow用户

发布于 2011-11-07 20:19:10

这方面有三种模式:

  • 每个类层次结构的。继承继承中的所有具体类型都存储在一个表中。
  • 每个类型的。继承中的每个类型都存储在它自己的表中。
  • 每个混凝土类的。每个具体类都有一个表,但抽象类没有表。

在您的例子中,对于现有的表,每个具体类的表看起来是最合适的。

这本书中对这些选项有很好的描述。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8039481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档