2011-05-26 51 views
1

我使用Visual Studio 2010 SP1与MVC3工具更新和EF 4.1代码优先支架我的应用程序的数据库。EF 4.1上的INSERT失败代码优先数据库

数据库CRUD操作在本地和本地数据库上进行测试时工作正常。直到我将数据库迁移到Web主机的SQL Server 2008 R2并将连接字符串中的托管数据库作为所有INSERT操作失败的目标。

每当我尝试添加新记录时,出现此错误:[I]无法将值NULL插入'Id'列'DB_23378_bloomlmsdata.dbo.Courses'列;列不允许有空值。 INSERT失败。该语句已终止[/ I]

我的数据模型都指定一个主标识键,像这样:

[Key] 
public int Id {get; set;} 
... 

而在这被搭建的本地数据库中,我看到一个非空的主身份键入每个表格。

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

我一直在解决这个问题,为期4周。我的网络主机是最新与我在我的应用程序和数据库中使用的技术。当我尝试获得帮助时,他们告诉我这是一个编码问题,但是我的代码已检出。任何想法将不胜感激。

+1

您是否在数据库中使用自动生成的标识值(标识)? – 2011-05-26 14:56:31

+0

是----------- – BumbleB2na 2011-05-26 15:02:41

+1

当您从SQL Server Management Studio发出INSERT命令时它工作吗?您也可以测试'DbContext.Database.ExecuteSqlCommand'来执行原始SQL INSERT命令,以缩小问题的范围。 – Slauma 2011-05-26 21:17:19

回答

0

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

相关问题