我在现有数据库表上定义了一个模型类,其中 ID 列设置为 [Key]。该表的字段定义为主键,int,不为空。它不是和标识列。
在代码中创建新记录时,我在调用 SaveChanges() 方法之前在代码中设置 ID 列(为唯一值)。
方法返回错误:
Cannot insert the value NULL into column 'xxx_id', table 'xxx.dbo.xxxxxx'; column does not allow nulls. INSERT fails. The statement has been terminated.
似乎 EF 假定 ID 列是标识列,因此不会在对数据库的 SQL 调用中传递 ID。
有没有办法定义 ID 列以告诉 EF 它不是标识列并在 SQL 调用中传递值
最佳答案
您需要为该属性指定 DatabaseGeneratedOption。在这种情况下,DatabaseGeneratedOption 应该是 None。
我通常使用流畅的配置来完成此操作,例如:
Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
.. 但看起来这也可以用属性指定。参见 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.databasegeneratedoption%28v=vs.103%29.aspx
[DatabaseGenerated(DatabaseGeneratedOption.None)]
关于asp.net-mvc - 使用非身份 ID key 在 Code First 上插入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7495742/