EF 6 Code First - 整数主键 - 无法将值 NULL 插入列
EF 6 Code First - Integer primary key - Cannot insert the value NULL into column
我正在尝试将 table 的主键更新为整数自动增量 ID。
这是我的实体:
public class Reservation
{
public int Id { get; set; }
public ReservationStatus Status { get; set; }
public string Name { get; set; }
public string CustomerName { get; set; }
...
}
这是我的 OnModelCreating 方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
...
modelBuilder.Entity<Reservation>()
.HasKey(e => e.Id)
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
...
}
这是生成的迁移:
public partial class Reservations_AlterKey_Id_AutoIncrement : DbMigration
{
public override void Up()
{
DropPrimaryKey("dbo.Reservations");
AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false, identity: true ));
AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String());
AddPrimaryKey("dbo.Reservations", "Id");
}
public override void Down()
{
DropPrimaryKey("dbo.Reservations");
AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false));
AddPrimaryKey("dbo.Reservations", new[] { "Id", "DeviceId", "CustomerTaxCode" });
}
}
当我尝试插入新的预订(在更新数据库之后)时,抛出以下异常:
Cannot insert the value NULL into column 'Id', table 'xxxxx.dbo.Reservations';
这是我在设计师 (visual studio 2015) 的列属性中看到的内容:
"Is Identity" 仍然是错误的。
我该如何解决这个问题?
提前致谢
您不能将标识添加到 SQL 服务器中的现有列。
Adding an identity to an existing column
建议的修复方法是创建一个新列。最好的方法是添加一个新的标识列,为其创建一个迁移,然后删除旧列并为其创建一个迁移。这样 EF 就不会尝试重命名旧列。
我正在尝试将 table 的主键更新为整数自动增量 ID。
这是我的实体:
public class Reservation
{
public int Id { get; set; }
public ReservationStatus Status { get; set; }
public string Name { get; set; }
public string CustomerName { get; set; }
...
}
这是我的 OnModelCreating 方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
...
modelBuilder.Entity<Reservation>()
.HasKey(e => e.Id)
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
...
}
这是生成的迁移:
public partial class Reservations_AlterKey_Id_AutoIncrement : DbMigration
{
public override void Up()
{
DropPrimaryKey("dbo.Reservations");
AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false, identity: true ));
AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String());
AddPrimaryKey("dbo.Reservations", "Id");
}
public override void Down()
{
DropPrimaryKey("dbo.Reservations");
AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false));
AddPrimaryKey("dbo.Reservations", new[] { "Id", "DeviceId", "CustomerTaxCode" });
}
}
当我尝试插入新的预订(在更新数据库之后)时,抛出以下异常:
Cannot insert the value NULL into column 'Id', table 'xxxxx.dbo.Reservations';
这是我在设计师 (visual studio 2015) 的列属性中看到的内容:
"Is Identity" 仍然是错误的。
我该如何解决这个问题?
提前致谢
您不能将标识添加到 SQL 服务器中的现有列。
Adding an identity to an existing column
建议的修复方法是创建一个新列。最好的方法是添加一个新的标识列,为其创建一个迁移,然后删除旧列并为其创建一个迁移。这样 EF 就不会尝试重命名旧列。