asp.net-mvc - 使用非身份 ID key 在 Code First 上插入失败

标签 asp.net-mvc entity-framework-4 ef-code-first

我在现有数据库表上定义了一个模型类,其中 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。

参见:http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.databasegeneratedoption%28v=vs.103%29.aspx

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

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/

相关文章:

asp.net-mvc - 如何限制对 MVC 中 Controller 或文件夹的访问?

asp.net-mvc - asp.net mvc 通过 https ssl 路由

c# - ControllerDescriptor FindAction 返回 null

c# - 无法让 EF Code First 在 MVC 4 中工作

asp.net - 如何提示输入连接字符串的用户名和密码?

c# - Entity Framework 4 部分 SaveChanges

c# - Azure 和本地开发之间的 EF 4.3 行为不同

c# - EF4.4 中每个具体类型 (TPC) 映射的表

ef-code-first - EF 4.1搞砸了。 FK命名策略是否已更改?

entity-framework-4.1 - DbSet.Attach,它到底是做什么的?