有没有办法撤消/删除/回滚EF 4.3外键命名约定?

时间:2012-02-22 17:56:24

标签: entity-framework-4 naming-conventions ef-code-first entity-framework-4.3

首先使用EF代码,我们有一个db种子框架,它使用依赖注入的Db初始化器和播种器来填充带有样本测试数据的dev db。

这些种子操作中的一些需要导入大量数据,因此对于几个表,我们将实际的SQL文件与INSERT语句一起使用。对于其中一些插入语句,必须先删除外键,然后重新启用:

ALTER TABLE [Schema].[TableName] NOCHECK CONSTRAINT [TableName_FkPropertyName]
-- perform a block of inserts
ALTER TABLE [Schema].[TableName] CHECK CONSTRAINT [TableName_FkPropertyName]

我刚刚从EF 4.2更新到EF 4.3,并发现这些不再有效。对EF创建的数据库的检查表明FK现在的命名方式不同:

FK_CodeFolder1.Table1Name_CodeFolder2.Table2Name_DbFkColumnName

有没有办法删除这个命名约定并回到原来的?如果没有,这怎么不是known issue or breaking change

在Ladislav的回复后更新

Ladislav是对的,我对新命名模式的上述解释并不完全正确。我已经更新了。之前的部分。不是完整的命名空间,但它是实体模型项目中文件夹的名称。因此,如果我在文件夹AggregateSet1中有一个实体WidgetAbc,那么fk模式片段将是AggregateSet1.WidgetAbc,而不仅仅是WidgetAbc

1 个答案:

答案 0 :(得分:1)

为什么你认为这是一个问题或突破变化?恕我直言,它是EF内部行为 - 你首先使用代码,在这种方法中,你不应该直接使用数据库,特别是你不应该将自定义数据库脚本基于硬编码名称,因为你无法控制它们的生成

我认为您无法恢复行为,但您可以开始使用迁移并对表定义进行编码 - AddForeignKey方法应该允许您命名FK约束。

顺便说一下。我在EFv4.3中看到了FK约束的不同命名模式:

FK_DependentTableName_PrincipalTableName_FKColumnName