2016-09-26 142 views
0

数据库优先解决方案。无法将NULL值插入'Id'列(数据库优先)

我使用两个表UserProfile。他们都使用uniqueidentifier(SQL Server)作为主键。我让User的方式自动接收它自己的GUID ID是从:

  1. 打开我的EDMX文件。

  2. 右键单击用户 - >属性的Guid列 - >将StoreGeneratedPattern更改为标识。

工作就像一个魅力。现在,我试着用Review做相同的,但我试图创建一个新的行,每次我收到以下错误:

无法将NULL值插入列“ID”,表 “XXXX .dbo.Profile';列不允许有空值。 INSERT失败。 声明已被终止。

如果我不使用IdentityStoreGeneratedPatternProfile,它不会产生一个唯一的ID,而不仅仅是零从而导致错误的重复,如果我再次尝试创建一个新的行帮。

为什么用户工作正常,但不是Profile

我遵循本指南guide这两个表。

+0

您的错误消息引用了一个名为“Profil”的表,而不是“Profile”。是否有可能拼错/命名它引用的表或类? –

+1

对于uniqueidentifier(Guid)列,不能使用DatabaseGeneratedOption.Identity。 DBMS中的Guid列永远不会自动增量,并且由于您已将StoreGeneratedPattern更改为Identity,因此EF不会将其作为值传递,因为它预计它将由DBMS提供。 – DevilSuichiro

+0

为了让它工作,将StoreGeneratedPattern更改为None并设置有效的Guid值或更改数据类型。 – DevilSuichiro

回答

1

As @Gert Arnold在评论中提到,我忘记在SQL Server中为Profile表添加newsequentialid()。一旦我这样做,我终于能够生成与DatabaseGeneratedOption.Identity独特的Guids。

你可以阅读更多关于这种方法here。这也包括Code-First的技术。