Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-不映射到DB表的抽象基类_C#_Entity Framework_Abstract Class - Fatal编程技术网

C# 实体框架-不映射到DB表的抽象基类

C# 实体框架-不映射到DB表的抽象基类,c#,entity-framework,abstract-class,C#,Entity Framework,Abstract Class,我有一个情况,我有4-5个非常相似的类,我想重新考虑使用一个抽象基类。 这背后的想法是允许每个类在遵循DRY原则的同时使用方法 我的问题是,这些类是从EF4生成的实体类,每次我试图修改模型时,它似乎都会崩溃 向我的EF模型中添加基类并使模型中的现有类作为基类继承的最佳/推荐的方法是什么?目前,我添加基类没有问题,按照它的要求给它一个ID属性,然后创建继承,但EF随后抱怨 “错误3024:映射从第18563行开始的片段时出现问题:必须为EntitySet MyBaseType的所有键属性(MyBa

我有一个情况,我有4-5个非常相似的类,我想重新考虑使用一个抽象基类。 这背后的想法是允许每个类在遵循DRY原则的同时使用方法

我的问题是,这些类是从EF4生成的实体类,每次我试图修改模型时,它似乎都会崩溃

向我的EF模型中添加基类并使模型中的现有类作为基类继承的最佳/推荐的方法是什么?目前,我添加基类没有问题,按照它的要求给它一个ID属性,然后创建继承,但EF随后抱怨

“错误3024:映射从第18563行开始的片段时出现问题:必须为EntitySet MyBaseType的所有键属性(MyBaseType.ID)指定映射。”

在这种情况下,我不希望基类型被持久化到数据库中,纯粹用作所有从它继承的类所共有的基方法的容器。我觉得我错过了一些简单的东西,但我一辈子都看不到

有没有关于如何以这种方式添加基类的想法?或者我应该只是在代码中添加基类并以某种方式绕过模型

编辑:作为进一步的信息,举一个例子,例如有3种类型,抵押申请表、银行账户申请表和信用卡申请表。它们当前存储在3个不同的表中,带有一组不同的字段。 我想做的是创建一个基类,比如说'Form',其中包含公共字段

简单来说,假设每个表都有一个名为“CreditCardFormID”、“BankAccountFormID”的主键ID字段。我想做的是创建一个带有属性“ID”的基本“Form”类,对于一个表,该属性将映射到“CreditCardFormID”和另一个“BankAccountFormID”


我很乐意在分部类中进行这种映射(因为我不想将“ID”持久化到DB),我只想在代码中使用它,这样我就可以为LoadForm(int-ID)之类的东西编写通用方法,而无需为每个实体类型编写巨大的开关,或为每个实体类型编写特定的方法。

有3种模式:

  • 每个类层次结构的表。继承继承权中的所有具体类型都存储在一个表中
  • 每种类型的表格。继承中的每个类型都存储在它自己的表中
  • 每种混凝土等级的表。每个具体类有一个表,但抽象类没有表
对于现有的表,每个具体类的表看起来最适合


这些选项在

中有很好的描述。我通过稍微调整一些东西,找到了解决方法。首先,我没有时间来重做模型(我认为这是最好的解决方案),系统中有太多的部分已经用现有的结构开发出来,在这一点上把它们都拆开了

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

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

在helper方法中,我需要将我的具体xyzenties实例切换到一个更通用的“ObjectContext”对象,然后明确地使用诸如“AddObject”而不是“AddBankAccountForm”、“AddCreditCardForm”等方法。
这涉及到一点GetType(),以确保对象被传递到正确的ObjectSet,但似乎可以按预期工作。

对于您的场景,这是否可行?可能,我将更详细地研究该链接。目前,4-5个类中的每一个都有自己的实体类型,并在我所追求的内容中定义了一个通用的基类型。问题是,它们已经映射到数据库中不同的表,现有数据将使销毁和重新构造数据本身变得很困难。这似乎不是一个好主意,除非更改基础表结构以匹配…是的,正如您所说,我非常确定我将需要使用“每个具体类的表”模式。我遇到的问题是,在将基类添加到模型中时,它似乎需要一个ID字段,然后ID字段被映射到某个对象。在我的示例中,我只希望继承一个实体类。它是由自动生成的代码生成的。我很乐意在不使用EF的情况下编写一个基类从中继承,但由于默认情况下我的具体类将从EntityObject继承,因此我无法强制它们在各自的部分中从不同的基类继承。我遇到了一个EF不喜欢接口的问题。抱歉,我无法添加更多详细信息。