2011-10-22 84 views
28

这是我的代码,很简单...代码第一 - 无法将NULL值插入列“ID”

var newUser = new User(); 
     newUser.Id=id; 
     newUser.Email = email; 
     this.DataContext.Set<User>().Add(newUser); 
     this.DataContext.SaveChanges(); 

我得到的错误是在this.DataContext.SaveChanges(); SQLException的指出:

无法将NULL值插入'Id'列中,表 'xxxxx.dbo.Users';列不允许有空值。 INSERT失败。

我已经调试,发现有在 this.DataContext.Set<User>().Add(newUser);

如果是这样的话,在NEWUSER标识&现值,又是怎样成为价值零?

错误堆栈跟踪:

[DbUpdateException: An error occurred while updating the entries. See the inner exception for details.] 
    System.Data.Entity.Internal.InternalContext.SaveChanges() +204 
    System.Data.Entity.Internal.LazyInternalContext.SaveChanges() +23 
    System.Data.Entity.DbContext.SaveChanges() +20 

我一直无法理解或解决这个....

衷心感谢您在这任何帮助......

问候 ARNAB

解决方案

好的,感谢拉迪斯拉夫给我指出了正确的方向: 添加属性[DatabaseGenerated(DatabaseGeneratedOption.None)]解决了这个问题。

+0

什么是id的类型?可能是因为在数据库中生成密钥而出现问题? –

+0

型是SQLSERVER BIGINT,在User类是长.. 此外,当我用正常的实体框架没有codefirst,它的工作原理 – Arnab

+0

ID参数也长 – Arnab

回答

7

我遇到了同样的问题,发现你的问题,然后注意到这个Entity Framework 4.1 code-first KeyAttribute as non-identity column问题(它有一个属性可以解决我的问题)。

如果定义用户为:

public class User 
{ 
    [DataMember, Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public long ID { get; set; } 

    [DataMember] 
    public string Email { get; set; } 
} 

这里的关键是把属性:

  • 重点
  • DatabaseGenerated

到ID列。显然,我们正在争取的问题是,实体框架在默认情况下期望使用键作为身份插入。

+0

这帮助我谢谢! –

21

参照this post看来,实体框架默认预计您插入标识列。

为了解决这个尝试:

modelBuilder.Entity<BOB>() 
    .HasKey(p => p.Id) 
    .Property(p => p.Id) 
    .StoreGeneratedPattern = StoreGeneratedPattern.None; 

builder.Entity<BOB>().MapSingleType().ToTable("BOB"); 

或装饰你的钥匙在POCO:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.None)] //Fixed typo 
public Int64 PolicyID { get; set; } 
+0

这应该是被接受的答案。 – Rap

+1

我认为该属性的枚举标志为“DatabaseGeneratedOption”,而不是“DatabaseGenerationOption” –

+0

它的工作对我来说任何一个可以解释为什么会发生如何解决属性问题。 – Shrivallabh

2

我通过设置列属性StoreGeneratedPatternComputed固定这一点。

一步下面的步骤:

  1. 打开EDMX(在Visual Studio中双击)
  2. 右键单击引起该问题,选择属性列。
  3. 变化StoreGeneratedPatternComputed

From the IDE enter image description here

希望帮助别人。

+0

这个问题特别针对代码优先 – Suamere

相关问题