[英]What's the most efficient way to inject behavior into all my entities?
我正在将大型数据模型从旧的Microsoft数据访问库转换为Entity Framework4。我想将这两种方法“注入”从现有数据库生成的大多数(如果不是全部)实体中我的EF模型:
public bool Deleted
{
get { return this.EntityState == System.Data.EntityState.Deleted; }
set
{
if (value)
Context.DeleteObject(this);
}
}
public bool Inserted
{
get { return this.EntityState == System.Data.EntityState.Added; }
set
{
if (value)
Context.AddObject(this.GetType().Name, this);
}
}
与其为每个实体(超过100个)创建局部类,不如将这些方法添加到模型中的所有实体的更好方法是什么?
预先感谢您的建议。
我将修改EF T4模板以自动生成这些属性。
扩展@Daz的答案(有点稀疏):在设计器中单击鼠标右键,然后选择Add Code Generation Item...
,然后选择ADO.NET Entity Object Generator.
它将创建一个模板,该模板生成与编译器已经创建的代码完全相同的代码,然后您可以对其进行自定义。 打开它,很容易看到如何修改它。 专为您描述的目的而设计。
这是最近的MSDN文章 ,详细介绍了这些内容。
为您的实体创建一个新的基类,它应该继承当前使用的基类,并使用该代码扩展其成员。
扩展方法可以解决问题。 但是,它们当然是方法 ,不是您在样本中所做的适当的属性(扩展属性在框架中尚不存在,只有扩展方法)。
public static class EntityObjectExtensions
{
public static bool IsDeleted(this EntityObject obj)
{
return obj.EntityState == System.Data.EntityState.Deleted;
}
public static bool Delete(this EntityObject obj)
{
Context.DeleteObject(obj);
}
public static bool IsInserted(this EntityObject obj)
{
return obj.EntityState == System.Data.EntityState.Added;
}
public static bool Insert(this EntityObject obj)
{
Context.AddObject(obj.GetType().Name, obj);
}
}
无疑,该解决方案是最优雅,最接近您需求的解决方案。 无需触摸代码生成,也无需在所有类上重复相同的代码。 如果这些方法需要改进,那么更改将在一个地方完成,您所有的类都将从中受益。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.