我基本上重新询问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);
}
答案 0 :(得分:1)
你可以使用这种黑客(这是黑客)。
使用您的实体在同一名称空间中创建类“抽象类EntityObject:System.Data.Objects.DataClasses.EntityObject”。然后你可以使用这个类作为基类。
答案 1 :(得分:0)
事实是,使用默认的T4模板设计器将生成从EntityClass继承的实体类。
要使用模型设计师并且能够提供自定义基类,您需要下载http://msdn.microsoft.com/en-us/library/ff477605.aspx(这是一个如何使用它的说明,在添加项目&gt;在线模板之前,但至少在我的vs2012上可以找不到它,它可能因为一个原因而消失了)模板和编辑模板文件来注入你的自定义基类,但我认为大多数程序员都会看POCO是有原因的,所以可能更好的想法就是拥有没有附加持久性的类。