.net 如何向EF4中使用model first创建的表添加表前缀?

.net 如何向EF4中使用model first创建的表添加表前缀?,.net,entity-framework,entity-framework-4,ef-model-first,.net,Entity Framework,Entity Framework 4,Ef Model First,我的客户机有一个db表命名约定,它要求我在所有表前面加上一个特定于应用程序的前缀,比如“myapp”—我使用EF4和模型优先的方法 我可以指定一个自定义的db命名空间,但他们不想为此应用引入新的命名空间-他们的其他应用都不使用dbo以外的命名空间 我一直在定制t4模板,但我无法指定工作流在生成EF运行时需要的3个元数据文件时应该使用哪些t4模板 使用EF是否有更好的方法来满足表前缀要求?我不确定数据库生成工作流是否会使用生成edmx文件的模板,但它肯定会使用一个模板来生成DDL。位于此路径上的:

我的客户机有一个db表命名约定,它要求我在所有表前面加上一个特定于应用程序的前缀,比如“myapp”—我使用EF4和模型优先的方法

我可以指定一个自定义的db命名空间,但他们不想为此应用引入新的命名空间-他们的其他应用都不使用dbo以外的命名空间

我一直在定制t4模板,但我无法指定工作流在生成EF运行时需要的3个元数据文件时应该使用哪些t4模板


使用EF是否有更好的方法来满足表前缀要求?

我不确定数据库生成工作流是否会使用生成edmx文件的模板,但它肯定会使用一个模板来生成DDL。位于此路径上的:
\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen

在该文件夹中查找名为
SSDLToSQL10.tt
的文件,您必须手动将该文件复制并粘贴到同一文件夹中,以便VS2010能够识别该文件,然后您可以根据DB命名约定修改和自定义该文件,以前缀表名。 在T4模板中,查找以下代码:

foreach (EntitySet entitySet in Store.GetAllEntitySets())
           {
               string schemaName = Id(entitySet.GetSchemaName());
               string tableName = Id(entitySet.GetTableName());
               ...
您可以将表名更改为具有自定义前缀。T4中有3个位置具有上述代码,您需要应用前缀。保存并关闭文件后,返回EDM inside VS。现在,当您下拉DDL Generation Template属性时,可以选择复制和更改的新T4文件。选择该选项,现在当您从模型生成数据库时,您会发现表名具有前缀

因此,可以修改模板并自定义DDL的构建方式。有一个难题:工作流没有使用修改后的T4来更改存储和映射定义(SSDL和MSL)的edmx文件。因此,即使数据库已正确创建,edmx仍指向原始表名。


因此,您需要在XML编辑器中打开edmx并手动更改C-S映射(MSL)和SSDL内容,使其具有前缀。为此,只需更改映射中的StoreEntitySet和SSDL内容中EntitySet的名称

您还可以将表属性添加到SSDL内容的EntitySet中,而不必对C-S映射和SSDL内容进行多次更改。这要容易得多。它变得像:

<EntitySet Name="Tests" EntityType="Test.Store.Tests" store:Type="Tables" Schema="dbo" *Table="Prefix_Tests"* />

感谢您的回复-我以前编辑过ssdltosql10.tt文件,它创建了正确的脚本-但是正如您提到的,ssdl和msl中的映射必须手动编辑。我希望有一种自动生成正确的ssdl和msl的方法。