0

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

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

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

有什么办法可以删除这个命名约定并回到原来的?如果不是,这怎么不是已知问题或重大变化

拉迪斯拉夫回复后更新

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

4

1 回答 1

1

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

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

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

FK_DependentTableName_PrincipalTableName_FKColumnName
于 2012-02-22T19:20:58.523 回答