C# 从C中实体框架生成的类派生

C# 从C中实体框架生成的类派生,c#,entity-framework,class,inheritance,deriving,C#,Entity Framework,Class,Inheritance,Deriving,我已经创建了一个实体数据模型,并从中生成了一个数据库 其中一个实体称为模板 创建分部类以扩展模板的功能,效果良好 如果我创建一个新类并尝试从模板派生,则在实例化时会出现运行时异常: 找不到EntityType“Template001”的映射和元数据信息 我怎样才能解决这个问题?我肯定需要从EF类继承 编辑 似乎不可能。如果是这种情况,那么实现以下需求的最佳方式是什么:模板实体存储关于模板的信息,每个模板都有自己的代码要执行。这就是我最初试图从实体派生的原因。它不受支持。您不能从实体派生新类型,并

我已经创建了一个实体数据模型,并从中生成了一个数据库

其中一个实体称为模板

创建分部类以扩展模板的功能,效果良好

如果我创建一个新类并尝试从模板派生,则在实例化时会出现运行时异常:

找不到EntityType“Template001”的映射和元数据信息

我怎样才能解决这个问题?我肯定需要从EF类继承

编辑


似乎不可能。如果是这种情况,那么实现以下需求的最佳方式是什么:模板实体存储关于模板的信息,每个模板都有自己的代码要执行。这就是我最初试图从实体派生的原因。

它不受支持。您不能从实体派生新类型,并使用它代替映射的实体类型进行持久化。如果您希望从实体派生类,则必须使用映射继承,其中每个子级也映射到数据库。

为什么首先需要从实体类继承?如果您想添加一些简单的行为,请使用分部类


更新:根据评论,行为可能会随着时间的推移而延长。在这种情况下,我建议使用组合/聚合,而不是继承。让需要扩展的类有一个实体作为字段。在Raheel的场景中,这将是一个名为TemplateLogic的类,其字段/属性类型为Template。

请检查等等问题。当数据库只有Template时,您想知道他们自己的代码是什么,EF应该如何理解context.Template1s.Load与context.Template2s.Load之间的区别?你能举例说明你打算如何使用这个吗?@Attila:谢谢。第一个链接提到EF不支持枚举,我顺便在分部类中使用了它,但是删除它也不起作用。到目前为止,似乎除了构图之外没有其他解决方案。有什么想法吗?@RaheelKhan-Sergey Sirotkin的评论似乎是你最好的选择。@hvd:context.Template1s.Load永远不需要调用。如果Template.ClassName==Template1,则将调用Template1.DoWork。因此实体本身知道Template1和Template2之间的区别。这种情况很难解释,但基本上每个派生类都将实现自定义功能,这些功能将随着时间的推移添加到代码库中。实体本身只存储应该使用何种派生类进行处理,然后只使用组合,而不是继承。让需要扩展的类有一个实体作为其字段。在您的场景中,您将有一个名为TemplateLogic的类,其字段/属性类型为Template.Thank。这将使代码复杂一点,但肯定会起作用。如果我不能很快在继承中找到答案,我将结束这项工作。你能更新你的答案并将关于作文的建议放入答案文本中吗?目前它看起来更像是一个没有任何建议解决方案的评论。@SergeySirotkin:谢谢。我已把你的答案标为正确。正如Ladislav所建议的,为了其他人的利益,请更新答案文本。我无法映射派生类,因为它们不用于持久性。创建它们是为了根据底层实体数据实现功能。不,这样不行。如果您派生实体并使用它从数据库获取数据或将数据保存到数据库,那么它将用于持久性,并且您还必须映射派生类。如果您不能映射它,这意味着您的继承被错误地使用,您应该使用@Sergey建议的组合。