【问题标题】:Change entities and properties names in Database First在 Database First 中更改实体和属性名称
【发布时间】:2012-08-24 08:03:58
【问题描述】:

我正在启动一个新应用程序,该应用程序必须使用现有数据库,该数据库使用一些在 .net 中非常烦人的命名约定(表名以指定表的业务域的几个三元组开头,列名以表开头三元组,三元组大写,下划线等分隔,)。

我想做的是编写一个简单的重命名规则(这就像找到最后一个下划线并取其后的所有内容一样简单)并将其应用到实体框架中。我真的不想在编辑器中一一编辑名称,特别是因为数据库可能会更改,我不想多次这样做。

我使用的是 Database First(因为该数据库已经存在并且它是“主数据库”)和 EF 4.x DbContext Generator,它开箱即用的效果非常好(尽管类和属性命名错误)。

我编辑了 T4 模板以重命名生成的实体和属性,但是当我尝试执行任何请求时,DbContext 对象找不到与我尝试请求的实体匹配的表,我得到了这个例外:

实体类型 [Entity Name] 不是模型的一部分 当前上下文。

这很明显为什么它找不到表:当我动态更改它时,没有任何东西告诉它如何匹配实体名称和表。 我读到我可以在 OnModelCreating(DbModelBuilder modelBuilder) 方法中添加指令,但这在 Database First 中没有使用(并且默认的 T4 模板在其中添加了一个异常,以防万一)。

所以现在我被卡住了,我不知道如何指定匹配。

我有几个想法,但不确定它是否正确或可行:

  • 使用“复数/单数”API 更改实体名称?听起来像一个肮脏的解决方法。但它可能会起作用(虽然没有尝试过)。
  • 寻找动态编辑 EDMX 文件的方法。
  • 之后编辑 EDMX,但这可能会使过程复杂化(在设计器中进行编辑,然后执行一个工具来更改 EDMX,然后运行自定义工具来重新生成实体和 DbContext...而今天我只需要在设计器中进行编辑)。
  • 使用代码优先(因为通过 DbContext 类中的属性或指令使用不同的实体名称似乎比表名称更容易),但听起来与现有数据库一起使用不会更复杂。李>

有什么想法吗?还是我错过了什么?

【问题讨论】:

    标签: c# entity-framework entity-framework-4 database-first ef-database-first


    【解决方案1】:

    您将无法为此使用 T4 转换,因为您希望更改实际 .edmx 文件的内容,以将您的商店实体名称(带有令人讨厌的前缀)映射到经过清理的概念实体名称。

    相反,您最好编写一个应用程序,将 .edmx 文件作为输入并清理概念模型标签下的名称,并修改映射名称以反映清理后的名称。我知道这是您的第三种选择,并且您希望尽可能避免这种情况,但这是最直接的方法。请记住,您只需在添加新表或列时运行此工具。

    【讨论】:

    • 我害怕得到那个答案:)。我希望我错过了什么。似乎有人已经完成了该工具:blog.cincura.net/…
    猜你喜欢
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多