在Database First中更改实体和属性名称

Jul*_*n N 11 c# entity-framework entity-framework-4 database-first ef-database-first

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

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

我正在使用Database First(因为数据库已经存在并且它是"主")和EF 4.x DbContext Generator,它开箱即用(虽然命名很糟的类和属性).

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

实体类型[实体名称]不是当前上下文的模型的一部分.

这显然是为什么它没有找到表:没有什么告诉它如何匹配实体名称和表,因为我在运行中更改它.我读到我可以在OnModelCreating(DbModelBuilder modelBuilder)方法中添加指令,但这不在Database First中使用(默认的T4模板在其中添加了一个例外,以防万一).

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

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

  • 使用"复数/单数"API来更改实体的名称?听起来像一个肮脏的解决方法.但它可能有效(尽管没有尝试).
  • 寻找一种即时编辑EDMX文件的方法.
  • 之后编辑EDMX但它可能使过程复杂化(在设计器中编辑,然后执行工具来改变EDMX,然后运行自定义工具来重新生成实体和DbContext ......而今天我只需要在设计器中编辑).
  • 使用Code First(因为使用不同的实体名称而不是表名,通过DbContext类中的属性或指令似乎更容易),但听起来将它与现有数据库一起使用并不会更复杂.

任何的想法 ?还是我错过了什么?

Ada*_*son 8

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

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

  • 我害怕得到那个答案:).我希望我错过了一些东西.似乎有人已经完成了这个工具:http://blog.cincura.net/228749-making-names-of-entities-or-any-identifiers-in-entity-framework-model-code-and-developer-friendly - 不是大写/ (2认同)