2011-10-22 82 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

相關問題