11

我开始必须使用那些使用.NET中真烦一些命名约定(表名开始与指定的业务领域几卦与现有数据库的新应用表,列名以表格trigram开头,trigrams以大写字母开头,并用下划线等分开)。更改实体和属性名称在数据库首先

我希望做的是写一个简单的重命名规则(这是为寻找最后的下划线一样简单,之后采取一切),并在实体框架应用它。我并不想在编辑器中逐一编辑名称,特别是因为数据库可能会更改,我不想多次执行。我使用数据库优先(因为数据库已经存在,它是“主”),和EF 4.x DbContext生成器,它的工作非常好,开箱即用(虽然有严重命名的类和属性) 。

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

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

这很明显,为什么它没有找到表:什么都没有告诉它如何匹配实体名称和表,因为我在飞行中更改它。 我读过,我可以在OnModelCreating(DbModelBuilder modelBuilder)方法中添加说明,但这不会在Database First中使用(并且默认的T4模板会在其中添加一个异常,以防万一)。

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

这里有几个想法我有,但不知道这是否是正确的或可行:

  • 使用“复数/奇异的” API来改变实体的名称?听起来像一个肮脏的解决方法。但它可能工作(尽管没有尝试)。
  • 寻找一种即时编辑EDMX文件的方法。
  • 事后编辑EDMX,但它可能会在编辑过程中设计师复杂(,然后执行工具来改变EDMX,然后运行自定义工具来重新生成实体的DbContext ......而今天我只是在设计编辑)。
  • 使用代码优先(因为它似乎更容易使用比表名不同的实体名称,穿过的DbContext类属性或指令),但它听起来就像它不会是更加复杂与现有数据库中使用它。

任何想法?或者我错过了什么?

回答

7

您将无法使用T4变换这一点,只要你想改变实际.edmx文件的内容映射你的实体店的名字(与讨厌的前缀)到您的消毒概念实体名称。

相反,你最好写一个应用程序,它需要一个.edmx文件作为输入和概念模型标签下进行消毒的名称并修改映射名称,以反映已消毒的名字。我知道这是你的第三选择,如果可能,你想避免这种情况,但这是最直接的方式。请记住,只有在添加新表格或列时才需要运行此工具。

+2

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

相关问题