实体框架数据库首先如何更改实体以使它们从基类派生

时间:2013-09-26 07:29:41

标签: c# .net entity-framework entity-framework-5 ef-database-first

我的数据库已经装满了包含数据的表格。我所看到的是所有表格共有5列:

  • Id-long,key
  • IsDeleted,位
  • DateDeleted,SmallDatetime
  • LastUpdated,SmallDatetime
  • LastUpdatedUser,nvarchar

现在,有一些常见的操作基于当前在任何地方复制的字段完成

我想要的是创建一个只包含这些公共属性的基类以及对它们完成的方法,并使每个其他实体都从中派生出来。

我不需要或想要在数据库本身上拥有这个基本实体,这只是我想帮助编码部分的东西。

问题是这是数据库优先,我不能改变数据库所以我必须使用的是POCO类和EDMX。

我怎样才能实现这个目标?

2 个答案:

答案 0 :(得分:5)

您正在寻找的东西类似于TPH(http://msdn.microsoft.com/en-us/data/jj618292.aspx

我不认为这对您有用,因为您有多个现有表。

可能的解决方案之一是:

  1. 创建一个名为“BaseModel”的基类(或类似的东西)
  2. 将这些属性添加为摘要以强制覆盖它们
  3. 在该基类中创建一个方法来填充这些字段,或者创建一个帮助器,它将BaseModel,IsDeleted,LastUpdated,LastUpdatedUser作为参数并更新模型。
  4. 扩展 model .tt文件生成的部分类,并从BaseModel类继承。
  5. 谢谢, 戴夫

答案 1 :(得分:3)

  1. 展开.edmx文件并打开Model.tt文件(而不是Model.Context.tt文件)
  2. 找到" partial class"的定义行正在 宣布。
  3. 看起来应该是这样的: <#= codeStringGenerator.EntityClassOpening(实体)#>
  4. 添加继承" :YourBaseClass"到行尾
  5. 完成。保存模型后,您将拥有所有旧实体派生基类,当此模板生成新实体时,它也将派生基类。