在EF 4.1代码优先数据库上INSERT失败

问题描述

| 我正在将Visual Studio 2010 SP1与MVC3工具更新和EF 4.1 Code First一起使用来支撑我的应用程序的数据库。 在本地和本地数据库上进行测试时,数据库CRUD操作可以正常工作。直到我将数据库迁移到Web主机的sql Server 2008 R2并以连接字符串中的目标托管数据库后,所有INSERT操作都失败了。 每当我尝试添加新记录时,都会出现此错误:[I]无法将值NULL插入列\'Id \',表\'DB_23378_bloomlmsdata.dbo.Courses \'中;列不允许为空。 INSERT失败。该声明已终止。[/ I] 我的数据模型都指定了主身份密钥,如下所示:
[Key]
public int Id {get; set;}
...
在脚手架的本地数据库中,我在每个表中看到一个不可为空的主身份密钥。 我在实体框架的某个地方读到,对数据库执行INSERT操作时,它将首先尝试插入具有空值的记录作为主键。我不知道该如何改写这种行为。而且,这似乎不是一个普遍的问题,人们通常仅在使用与IDENTITY密钥不同的东西时才遇到此问题。作为记录,在EF 4.1发布之前,我对EF CodeFirst CTP5遇到了相同的问题。 我已经进行了4周的故障排除。。我的Web主机与我在应用程序和数据库中使用的技术保持最新。当我尝试寻求帮助时,他们告诉我这是一个编码问题,但是我的代码已签出。任何想法将不胜感激。     

解决方法

检查Id列的IsIdentity属性,应将其设置为yes。 EF不会在插入内容中传递标识列的值,因为它应该由数据库自动生成。