gpt4 book ai didi

entity-framework - 如何停止 Entity Framework 5 迁移添加 dbo。成键名?

转载 作者:行者123 更新时间:2023-12-03 09:08:58 25 4
gpt4 key购买 nike

我使用 Entity Framework 4.3 Code First 和手动迁移和 SQL Express 2008 开始了一个项目,最近更新到 EF5(在 VS 2010 中),并注意到现在当我更改外键约束之类的内容时,迁移代码添加了“dbo”。到表名的开头,因此它构造的外键名对于现有约束是不正确的(通常现在看起来很奇怪)。

EF 4.3 中的原始迁移脚本(注意 ForeignKey("Products", t => t.Product_Id) ):

    CreateTable(
"Products",
c => new
{
Id = c.Int(nullable: false, identity: true),
ProductName = c.String(),
})
.PrimaryKey(t => t.Id);

CreateTable(
"KitComponents",
c => new
{
Id = c.Int(nullable: false, identity: true),
Component_Id = c.Int(),
Product_Id = c.Int(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("Products", t => t.Component_Id)
.ForeignKey("Products", t => t.Product_Id)
.Index(t => t.Component_Id)
.Index(t => t.Product_Id);

生成的外键名称:
FK_KitComponents_Products_Product_Id
FK_KitComponents_Products_Component_Id

如果我然后升级到 EF5 并更改外键,迁移代码看起来像(注意 “dbo.KitComponents”和“dbo.Products” 而不是 “KitComponents”和“Products” " ):

DropForeignKey("dbo.KitComponents", "Product_Id", "dbo.Products");
DropIndex("dbo.KitComponents", new[] { "Product_Id" });

并且更新数据库失败并显示以下消息:
' FK_dbo.KitComponents_dbo.Products_Product_Id ' 不是约束。
无法删除约束。请参阅以前的错误。

所以似乎从 EF5 开始,约束命名已从
FK_KitComponents_Products_Product_Id

FK_dbo.KitComponents_dbo.Products_Product_Id(带有 dbo. 前缀)

我怎样才能让 EF5 像在 EF 4.3 中一样运行,这样我就不必更改它吐出的每一段新迁移代码?

我找不到任何关于为什么会发生这种变化以及如何处理的发行说明:(

最佳答案

您可以通过对 CSharpMigrationCodeGenerator 进行子类化来自定义生成的代码。类(class):

class MyCodeGenerator : CSharpMigrationCodeGenerator
{
protected override void Generate(
DropIndexOperation dropIndexOperation, IndentedTextWriter writer)
{
dropIndexOperation.Table = StripDbo(dropIndexOperation.Table);

base.Generate(dropIndexOperation, writer);
}

// TODO: Override other Generate overloads that involve table names

private string StripDbo(string table)
{
if (table.StartsWith("dbo."))
{
return table.Substring(4);
}

return table;
}
}

然后在您的迁移配置类中设置它:
class Configuration : DbMigrationsConfiguration<MyContext>
{
public Configuration()
{
CodeGenerator = new MyCodeGenerator();
}
}

关于entity-framework - 如何停止 Entity Framework 5 迁移添加 dbo。成键名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12053627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com