2011-10-22 14 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です:

列 'Id'に値NULLを挿入できません。テーブル 'xxxxx.dbo.Users';列はNULLを許可しません。 INSERTは失敗します。

私は、デバッグおよび値は、このような場合は、どのように値がnullになってきているが this.DataContext.Set<User>().Add(newUser);

でNEWUSER内のID &メールであることを発見しましたか?

エラースタックトレース:私は理解したり、これを解決することができていない

[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

解決策

私は正しい方向に私を指すようにLadislavに感謝します。 属性を追加すると、[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カラムに。明らかに、私たちが戦う問題は、Entity FrameworkがデフォルトでキーがIDである挿入を行うことを期待していることです。

+0

これは私に感謝しました! –

21

this postを参照すると、エンティティフレームワークはデフォルトでID列に挿入すると考えられます。

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

を私はComputedに列プロパティにStoreGeneratedPatternを設定することで、これを修正しました。以下のステップによって

ステップ:

  1. 右、問題の原因となるカラムのプロパティを選択をクリックしますEDMX(Visual Studioでダブルクリック)
  2. を開きます。
  3. StoreGeneratedPatternComputedに変更してください。

From the IDE enter image description here

誰かに役立ちます願っています。

+0

質問は、コード最初のために特別です – Suamere

関連する問題