【问题标题】:Entity Framework Database first How to alter entities to make them derive from a base classEntity Framework Database first 如何更改实体以使它们从基类派生
【发布时间】:2013-09-26 07:29:40
【问题描述】:

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

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

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

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

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

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

我怎样才能做到这一点?

【问题讨论】:

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


    【解决方案1】:

    您要查找的内容类似于 TPH (http://msdn.microsoft.com/en-us/data/jj618292.aspx)

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

    可能的解决方案之一是:

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

    谢谢, 戴夫

    【讨论】:

    • 我认为这个解决方案可以实现,但我有 200 张桌子。可以通过模板添加吗?我真的不想手动执行 200 多次
    • 嗨,我想说你可以在 T4 模板中添加它:)
    • 嗨@sergio。我遇到了同样的问题。您能否建议如何修改 T4 模板以使生成的类继承基类?
    【解决方案2】:
    1. 展开.edmx文件,打开Model.tt文件(不是Model.Context.tt那个)
    2. 查找“部分类”定义所在的行 宣布。
    3. 应该看起来像这样:
    4. 将继承“:YourBaseClass”添加到行尾

    完成。保存模型后,所有旧实体都会派生基类,当此模板生成新实体时,它也会派生基类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多