在EF 4.1 Code First数据库上INSERT失败

时间:2011-05-26 14:49:11

标签: asp.net-mvc-3 ef-code-first entity-framework-4.1

我正在使用带有MVC3工具更新的Visual Studio 2010 SP1和用于支持我的应用程序数据库的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;}
...

在获取scaffolded的本地数据库中,我在每个表中都看到了一个不可为空的主身份密钥。

我读到Entity Framework的某个地方,当对数据库执行INSERT操作时,它将首先尝试插入一个空值作为主键的记录。我不知道如何覆盖这种行为。此外,这似乎不是一个常见问题,人们通常只在使用与IDENTITY键不同的东西时才会遇到此问题。为了记录,在EF 4.1发布之前,我遇到了与EF CodeFirst CTP5相同的问题。

我已经对此进行了4周的故障排除..我的网站主机是我在我的应用程序和数据库中使用的技术的最新版本。当我试图获得帮助时,他们告诉我这是一个编码问题,但我的代码检查出来。任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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