Asp.net mvc 首先使用非标识id键插入代码失败

Asp.net mvc 首先使用非标识id键插入代码失败,asp.net-mvc,entity-framework-4,ef-code-first,Asp.net Mvc,Entity Framework 4,Ef Code First,我在现有数据库表上定义了一个ID列设置为[Key]的模型类。该表的字段定义为主键int,而不是null。它不是和标识列 在代码中创建新记录时,我在调用SaveChanges()方法之前在代码中设置ID列(为唯一值) 该方法返回错误: 无法将值NULL插入表的“xxx\u id”列中 “xxx.dbo.xxxxxx”;列不允许空值。插入失败。这个 声明已终止 似乎EF假定ID列是一个标识列,因此不会在SQL调用中将ID传递给数据库 有没有一种方法可以定义ID列来告诉EF它不是标识列,并在SQL调用

我在现有数据库表上定义了一个ID列设置为[Key]的模型类。该表的字段定义为主键int,而不是null。它不是和标识列

在代码中创建新记录时,我在调用SaveChanges()方法之前在代码中设置ID列(为唯一值)

该方法返回错误:

无法将值NULL插入表的“xxx\u id”列中 “xxx.dbo.xxxxxx”;列不允许空值。插入失败。这个 声明已终止

似乎EF假定ID列是一个标识列,因此不会在SQL调用中将ID传递给数据库


有没有一种方法可以定义ID列来告诉EF它不是标识列,并在SQL调用中传递值?您需要为属性指定DatabaseGeneratedOption。在这种情况下,DatabaseGeneratedOption应该是None

见:

我通常使用流畅的锥形配置完成此操作,如:

Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
。。但看起来这也可以用属性指定。看


我也有同样的问题,我已经把问题贴在这里了
[DatabaseGenerated(DatabaseGeneratedOption.None)]