C# 首先更改数据库中的实体和属性名称

C# 首先更改数据库中的实体和属性名称,c#,entity-framework,entity-framework-4,database-first,ef-database-first,C#,Entity Framework,Entity Framework 4,Database First,Ef Database First,我正在启动一个新的应用程序,它必须使用一个现有的数据库,该数据库使用一些在.net中非常烦人的命名约定(表名以几个指定表的业务域的三角形开始,列名以表三角形开始,三角形以大写字母和下划线分隔,等等) 我想做的是编写一个简单的重命名规则(这就像查找最后一个下划线一样简单,并在其后获取所有内容),然后将其应用到实体框架中。我真的不想在编辑器中一个接一个地编辑这些名称,尤其是因为数据库可能会更改,我不想多次这样做 我首先使用的是数据库(因为数据库已经存在,它是“主数据库”)和EF 4.x DbCont

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

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

我首先使用的是数据库(因为数据库已经存在,它是“主数据库”)和EF 4.x DbContext生成器,它的开箱即用效果非常好(尽管名称不好的类和属性)

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

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

这就是为什么它找不到表的原因:当我动态地修改它时,没有任何东西告诉它如何匹配实体名称和表。 我读到我可以在
OnModelCreating(DbModelBuilder modelBuilder)
方法中添加指令,但这不是在数据库中首先使用的(默认的T4模板在其中添加了一个异常,以防万一)

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

以下是我的一些想法,但不确定是否正确或可行:

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

有什么想法吗?还是我遗漏了什么?

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


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

我害怕得到那个答案:)。我希望我错过了什么。似乎有人已经使用了该工具: