gpt4 book ai didi

c# - Entity Framework 6 Code First int 标识列的第一行值为零

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:04 25 4
gpt4 key购买 nike

第一次执行更新数据库命令以使用种子数据填充数据库后:

发现所有 int Id 列都以零 (0) 开头,而不是预期的一 (1)。

在 Configuration.cs 中的 Seed 方法的顶部为每个实体/表添加了以下 2 行代码:

[注意:由于外键约束,我删除了后代表中的所有行,然后沿着祖先链向上移动。]

context.Database.ExecuteSqlCommand("delete from Widgets");
context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('Widgets', RESEED, 0)");

然后,我重新运行更新数据库,所有 int Id 列都以一 (1) 开头。

如果我删除数据库,运行/添加初始迁移,然后运行更新数据库,所有 int Id 列都以零 (0) 开头。

就好像 DBCC CHECKIDENT ('Widgets', RESEED, 0) SQL 语句不是在第一次运行 Seed 方法时执行的。

此外,如果实体/表没有种子数据,则无论运行多少次 update-database 命令,第一次向空表添加行时,Id 将为零( 0).

可能,有没有办法在 IdentityModels.cs 的覆盖 OnModelCreating 方法中为 int Identity 列指定初始种子值?

更新:

  1. 已更改:Configuration.cs 中的 DBCC CHECKIDENT ('Table', RESEED, 0)DBCC CHECKIDENT ('Table', RESEED, 1)

  2. 删除数据库。

  3. 执行:update-database -TargetMigration Initial(结果是所有以 1 开头的 int Id。)

  4. 正在执行 update-database 以重置数据库。 (结果都是2开头的int Id,不管你运行多少次update-database。)

最佳答案

您的具体迁移类应该类似于以下内容:

public class 201707132034165_MyAwesomeDbInitial : DbMigration
{
#region <Methods>

public override void Up()
{
CreateTable(
"dbo.HasOverdrive",
c => new
{
HasOverdriveId = c.Int(nullable: false, identity: true),
HasOverdriveValue = c.String(nullable: false, maxLength: 5)
})
.PrimaryKey(t => t.HasOverdriveId)
.Index(t => t.HasOverdriveValue, unique: true, name: "UX_HasOverdrive_AlternateKey");
}

// This should is called by your DbConfiguration class
public void Seed(MyAwesomeDbContext context)
{
// DO THIS FIRST !!!!!!!!!!!!!!!
context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('HasOverdrive', RESEED, 0)");

// LOOKUPS
SeedHasOverdrive(context);
}

private void SeedHasOverdrive(MeasurementContractsDbContext context)
{
context.HasOverdrive.AddOrUpdate
(
m => m.Id,
new HasOverdrive { HasOverdriveId = 0, HasOverdriveValue = "No" }, // 0 = FALSE
new HasOverdrive { HasOverdriveId = 1, HasOverdriveValue = "Yes" } // 1 = TRUE
);
}

#endregion
}

关于c# - Entity Framework 6 Code First int 标识列的第一行值为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33068501/

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