Asp.net mvc 3 ASP.NET MVC/EF-手动分配ID(主键)

Asp.net mvc 3 ASP.NET MVC/EF-手动分配ID(主键),asp.net-mvc-3,entity-framework-4,Asp.net Mvc 3,Entity Framework 4,当我尝试手动在表中插入新行时,出现以下错误: Cannot insert the value NULL into column 'VehicleID', table 'TestServer.Vehicles'; column does not allow nulls. INSERT fails. The statement has been terminated. 即使我在代码中设置了VehicleID,如下所示: List<Vehicles> vehicleList = cont

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

Cannot insert the value NULL into column 'VehicleID', table 'TestServer.Vehicles'; column does not allow nulls. INSERT fails.
The statement has been terminated.
即使我在代码中设置了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...
List vehicleList=context.Vehicles.ToList();
如果(vehicleList.Count==0)
{
vehicle.VehicleID=1;
}
其他的
{
vehicle.VehicleID=vehicleList.Last().VehicleID+1;
}
上下文。车辆。添加(车辆);
SaveChanges();
//其他代码。。。
我需要这样做的原因是,在这个操作中,我实际上正在更新另一个模型,但我还想基于另一个模型更新我的车辆模型


My VehicleID属性具有[Key]数据注释集,这可能是原因之一吗?

一个可能的原因是您没有将模型中的Key属性标记为未生成数据库。您可以使用数据批注或

公共级车辆
{
[数据库生成(DatabaseGeneratedOption.None)]
public int VehicleID{get;set;}
//...
}
…或使用Fluent API:

modelBuilder.Entity()
.Property(v=>v.VehicleID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

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

谢谢!通过使用[DatabaseGenerated(DatabaseGeneratedOption.None)]解决了我的问题problem@Slauma如果我能投你10票,我会的。我已经用头撞了四天了。非常感谢。