我正在开发一个新应用程序,必须使用现有数据库,该数据库使用一些在.NET中真正令人讨厌的命名约定(表名以指定表业务域的几个三字码开头,列名以表的三字码开头,三字码大写并用下划线分隔等)。
我想要做的是编写一个简单的重命名规则(这就像查找最后一个下划线并获取它后面的所有内容一样简单),并在Entity Framework中应用它。我不想逐个编辑编辑器中的名称,特别是因为数据库可能会更改,我不想多次执行此操作。
我正在使用Database First(因为数据库已经存在并且它是“主数据库”),以及EF 4.x DbContext Generator,它可以很好地工作(尽管类和属性的名称很糟糕)。
我编辑了T4模板以重命名生成的实体和属性,但是当我尝试执行任何请求时,DbContext对象无法找到与我尝试请求的实体匹配的表格,然后我收到以下异常:
实体类型[实体名称]不是当前上下文的模型的一部分。
显然,它找不到表:没有任何东西告诉它如何将实体名称与表匹配,因为我正在实时更改它。
我阅读了可以在OnModelCreating(DbModelBuilder modelBuilder)
方法中添加指令,但这不适用于Database First(默认T4模板在其中添加了一个异常,以防万一)。
所以现在我被卡住了,我不知道如何指定匹配。 这里有几个想法,但不确定是否正确或可行:
- 使用“复数/单数”API来更改实体的名称?听起来像是一个肮脏的解决方案。 但它可能有效(尚未尝试)。
- 找到一种实时编辑EDMX文件的方法。
有任何想法吗?或者是我漏掉了什么?