2012-06-23 18 views
22

EFでこのエラーが発生します。Entity Frameworkエラー:テーブルのID列に明示的な値を挿入できません。

Cannot insert explicit value for identity column in table 'GroupMembers_New' when IDENTITY_INSERT is set to OFF.

Dbの上の列には、アイデンティティの増分で、EF設計ファイルに対して、StoreGeneratedPatternも同様にidentityです。 EFが保存しようとするたびに0を挿入しようとしているようです。

いくつかの提案では、IDはテーブルに予約されているか、テーブルを削除してスクリプトを再実行すると述べています。

アイデア?

GroupMember groupMember = new GroupMember(); 
      groupMember.GroupId = group.Id; 
      groupMember.UserId = (new UserId(group.Owner)); 
      //groupMember.Id = _groupContext.GroupMembers.Count(); 
      group.GroupMembers.Add(groupMember); 

      _groupContext.SaveChanges(); 

database

EF Designer

答えて

35

私はこの前に実行した:

はここにいくつかのコードです。このエラーは、データベースが自動的に値を割り当てる列に値を明示的に割り当てることを意味します。

提案: データベースで行った変更を反映するようにedmxファイルを更新してください。 データベースが自動的に値を割り当てる場合は、そのプロパティの下にデザイナファイルの "IsDbGenerated = true"属性が表示されます。それがない場合は、手動で追加することができます。

+2

実際、edmxのアップデートは解決策でした。 edmxデザイナーのef5に –

+2

ありがとうございます。 'StoreGeneratedPatern'と呼ばれるフィールドに対してプロパティがあります。これを 'Identity'に設定してください。 – timothy

18

これを試してみてください:

using System.ComponentModel.DataAnnotations.Schema; 
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
public decimal Identity_Col { get; set; } 

Entity Frameworkのクラス・ファイルは、ID列にこれらのコード行を追加します。

+2

これもIDを生成します。 自分で値を指定して、テーブルの主キーとして使用したい場合はどうすればいいですか? –

+0

EFコアコードを使用すると、まず複合キーを持つテーブルがあります.1つの列はIDです。 '[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 'という属性を追加することは私の仕事でした。 –

3

EF 6では、モデルのフィールド/列に、これを行うためのプロパティがあります。 StoreGeneratedPattern。

これをプロパティドロップダウンリストの「ID」に設定します。

(私はIsDbGeneratedを使用して、EF 4について上記の答えを知らない、EF 4のためのようです)

そして、これは、要素の属性に基礎となるXMLに対応:

<Property Name="MyTableId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 

- ただし、デザイナを使用できるため、XMLを手動で処理する必要はありません。

これがどうやって混乱するかは不明です。モデルからデータベースをリフレッシュした後でも問題はありました。おそらく、モデルをすでに生成した後で、テーブルにPKを設定したり、名前を変更したりすると、混乱します。 (最初はコードではなくテーブル/データベースの最初のアプローチを使用しています)

エンティティコードにC#属性を設定する上記の方法は使用できません。この状況ではエンティティコードはEFによって生成されるためです。 EFは、フィールドがアイデンティティであることを(「それ自身で」)理解しているはずです。

8

アイデンティティである財産の上にこれらはattribsを入れて:グーグルで

[Key] 
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
public int ID { get; set; } 
+0

これはAzure Mobile Servicesでは動作しないようです。私はこのフィールドを持つモデルを持っています: [インデックス(IsClustered = true)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [TableColumnAttribute(TableColumnType.CreatedAt)] public DateTimeOffset? CreatedAt {get;セット; } – WiteCastle

+2

属性を追加しましたが、「ReferentialConstraintの依存プロパティがストア生成の列にマップされています」 – Logar314159

+0

これは完全に機能しました。どうも。 –

3

最初の試合なので、ここに私の解決策:

EFコード最初:のでAUTOINC PK「ID」フィールドのをとGUID列、このようなデザイン:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid FileToken { get; set; } 

重複した同一性がありました。私はそれを次のように変更しました:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
[DefaultValue("newid()")] 
public Guid FileToken { get; set; } 

そして問題はなくなりました。

お手伝いします。

Erik

+0

EFコアコードを使用する最初に、複合キーを持つテーブルがあります.1つの列はIDです。 '[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 'という属性を追加することは私の仕事でした。 –

0

私のアプリでこの問題が発生しました。 idフィールドのプロパティ "StoredGeneratedPattern"をIdentityに変更して修正しました。

だから、モデルに行ってください。テーブルを探します。主キーfielのプロビジョニングをクリックします。プロパティを変更します。

関連する問題