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模板在其中添加了一个例外,以防万一).
所以现在我卡住了,我不知道如何指定匹配.
以下是我的几个想法,但不确定它是否正确或可行:
任何的想法 ?还是我错过了什么?
您将无法使用T4转换,因为您希望更改实际.edmx文件的内容,以将商店实体名称(带有令人讨厌的前缀)映射到已清理的概念实体名称.
相反,您最好编写一个以.edmx文件作为输入的应用程序,并清理概念模型标记下的名称,并修改映射名称以反映已清理的名称.我知道这是你的第三个选择,你想尽可能避免这种情况,但这是最直接的方法.请记住,添加新表或列时只需运行此工具.