ASP.NET MVC/EF - 手动分配ID(PK)

Cal*_*ass 3 entity-framework-4 asp.net-mvc-3

当我尝试手动向表中插入新行时,出现以下错误:

Cannot insert the value NULL into column 'VehicleID', table 'TestServer.Vehicles'; column does not allow nulls. INSERT fails.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

即使我在我的代码中设置了VehicleID,如下所示:

List<Vehicles> vehicleList = context.Vehicles.ToList();

if(vehicleList.Count == 0)
{
     vehicle.VehicleID = 1;
}
else 
{
     vehicle.VehicleID = vehicleList.Last().VehicleID + 1;
}

context.Vehicles.Add(vehicle);
context.SaveChanges();

// Other code...
Run Code Online (Sandbox Code Playgroud)

我需要这样做的原因是因为在这个Action中,我实际上正在更新另一个模型,但我也想更新我的Vehicle模型,基于其他模型即时更新

我的VehicleID属性有[Key]数据注释集,这可能是原因吗?

Sla*_*uma 8

一个可能的原因是您没有在模型中标记key属性,因为没有生成数据库.您可以使用数据注释来执行此操作...

public class Vehicle
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int VehicleID { get; set; }

    //...
}
Run Code Online (Sandbox Code Playgroud)

...或使用Fluent API:

modelBuilder.Entity<Vehicle>()
    .Property(v => v.VehicleID)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Run Code Online (Sandbox Code Playgroud)

对于整数键,EF默认情况下假定该列是数据库中的自动生成标识,因此不会将ID的值发送到服务器.如果在DB中未自动生成列,则会出现错误.