【问题标题】:Is there a way to undo /remove / rollback EF 4.3 foreign key naming convention?有没有办法撤消 /remove / rollback EF 4.3 外键命名约定?
【发布时间】:2012-02-22 17:56:23
【问题描述】:

首先使用 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

有什么办法可以去掉这个命名约定并回到原来的样子?如果不是,这怎么不是known issue or breaking change

Ladislav 回复后更新

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    FK_DependentTableName_PrincipalTableName_FKColumnName
    

    【讨论】:

    • 我不得不反对控制名称生成。 API 让您可以控制几乎所有其他可以在 SQL 中实现的东西的命名——模式名、表名、列名等。如果至少发布了新的命名约定,那将非常有帮助。我们很幸运,因为在大多数情况下,我们完全按照您所说的进行 - 没有创建很多自定义 SQL,如视图、索引、存储过程等。我期待在新的迁移功能成熟时使用它们,但仍然会想了解为什么需要更改这种命名模式。
    • 如果你想知道为什么模式被改变了,你应该直接询问 ADO.NET 团队。
    • 官方有消息说FK改名了吗?当您在 4.3 或更高版本中创建从 db 架构中删除 FK 的迁移时,这是一个重大更改,而 FK 是在 4.3 之前的版本中创建的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多