【问题标题】:Can EntityObject be sub-classed?EntityObject 可以被子类化吗?
【发布时间】:2012-07-21 15:56:09
【问题描述】:

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

是否可以告诉 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);
}

【问题讨论】:

标签: c# .net entity-framework inheritance


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我按照你说的做了;他们的关键部分是明确添加该模板;我不必下载,因为我认为它必须已经存在,以便用作默认的“隐藏”生成器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多