5

我有一个数据库已经充满了其中的数据表。我所看到的是所有表都有 5 列共同:

  • Id-long, 关键
  • 已删除,位
  • 删除日期、小日期时间
  • 上次更新,小日期时间
  • LastUpdatedUser, nvarchar

现在,有一些基于当前在各处复制的字段完成的常见操作

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

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

问题是这是数据库优先,我无法更改数据库,所以我只需要使用 POCO 类和 EDMX。

我怎样才能做到这一点?

4

2 回答 2

5

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

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

一种可能的解决方案是:

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

谢谢,戴夫

于 2013-09-26T08:17:02.050 回答
3
  1. 展开 .edmx 文件并打开 Model.tt 文件(不是 Model.Context.tt 一个)
  2. 找到宣布“部分类”定义的行。
  3. 应该看起来像这样:<#=codeStringGenerator.EntityClassOpening(entity)#>
  4. 将继承“:YourBaseClass”添加到行尾

完毕。保存模型后,您将拥有派生基类的所有旧实体,当此模板生成新实体时,它也将派生基类。

于 2017-02-24T12:32:36.743 回答