web-dev-qa-db-ja.com

Entity Frameworkエラー:テーブルのID列に明示的な値を挿入できません

EFでこのエラーが発生しています。

IDENTITY_INSERTがOFFに設定されている場合、テーブル 'GroupMembers_New'のID列に明示的な値を挿入できません。

Dbの列はID増分であり、EFデザインファイルでは、StoreGeneratedPatternidentityです。 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

41
Homero Barbosa

以前にこれに遭遇しました。このエラーは、データベースが自動的に割り当てる列に明示的に値を割り当てようとしていることを意味します。

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

55
ems305

これを試して:

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

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

27
thomas

これらの属性をアイデンティティであるプロパティの上に置きます:

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
15
Amin Saqi

グーグルで最初に一致したので、ここに私の解決策があります:

EF Code First:自動インクリメントのPK 'id'フィールドとguid列のため、次のように設計します:

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

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

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

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

お役に立てば幸いです。

エリック

6
Erik

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

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

(EF 4については知りません。IsDbGeneratedを使用した上記の答えはEF 4のものです。)

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

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

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

これがどのように混乱するかは明らかではありません。データベースからモデルを更新した後でも問題が発生しました。モデルを既に生成した後で、テーブルにPKを設定したり、名前を変更したりすると、混乱する可能性があります。 (コードファーストではなく、テーブル/データベースファーストのアプローチを使用しています。)

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

3
Smitty

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

したがって、モデルに移動します。テーブルを検索します。主キーフィールドのプロパティをクリックします。プロパティを変更します。

1
Charly N

AspNetCore 2.xアプリケーションでも同じ問題とエラーメッセージが発生しました。私がそれを解決できる唯一の方法は、DbContextクラスのModelBuilder.Entityメソッドから次の行を削除することでした。

// remove: entity.Property(e => e.Id).ValueGeneratedNever();
0
Red Feet