1

我基本上是在重新问这个问题,因为唯一且被接受的答案不是问题的答案。

是否可以告诉 EF 使用继承 EntityObject 的类(如下所示)作为生成的实体类的基类?

public abstract class CustomEntityObject : EntityObject
{
    <additional functionality>
}

我问的原因是我想停止添加接口并在单独的部分类文件中的所有实体类型上实现它们。通过对 EntityObject 进行子类化,我只能实现一次附加功能。

更新:

EF 隐式使用 .tt 文件来生成实体类。隐含的意思是您在项目中看不到 .tt 文件。解决方案是显式添加模板(右键单击 .edmx 设计器并单击“添加代码生成项...”,然后添加“ADO.NET EntityObject Generator”)。然后更改 .tt 中的单个值:

string BaseTypeName(EntityType entity, CodeGenerationTools code)
{
    return entity.BaseType == null ? "EntityObject" : MultiSchemaEscape((StructuralType)entity.BaseType, code);
}

更改为:

string BaseTypeName(EntityType entity, CodeGenerationTools code)
{
    return entity.BaseType == null ? "CustomEntityObject" : MultiSchemaEscape((StructuralType)entity.BaseType, code);
}
4

2 回答 2

1

您可以使用这样的 hack(这是hack)。

在与您的实体相同的命名空间中创建类“抽象类 EntityObject:System.Data.Objects.DataClasses.EntityObject” 。然后你可以使用这个类作为基类。

但是,如果您想创建复杂而美观的解决方案 - 使用 T4 模板、自定义生成等。您可以在这里找到解决方案这里

于 2012-10-08T13:44:07.583 回答
0

事情是,使用默认的 T4 模板设计器将生成从 EntityClass 继承的实体类。

要使用模型设计器并有能力提供自定义基类,您需要下载http://msdn.microsoft.com/en-us/library/ff477605.aspx(在添加项目之前,它是如何使用它的描述>在线模板,但至少在我的vs2012上找不到了,可能是因为某种原因已经消失了)模板并编辑模板文件以注入您的自定义基类,但我认为大多数程序员都将POCO视为一个原因,所以可能更好的主意是让类没有附加持久性。

于 2012-07-23T13:04:13.657 回答