62

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();

データベース

EFデザイナー

4

12 に答える 12

77

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

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

于 2012-06-24T01:44:38.513 に答える
21

これらの属性を ID であるプロパティの上に置きます。

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
于 2014-05-22T11:57:58.127 に答える
4

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

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

(EF 4については知りません。IsDbGeneratedを使用した上記の回答は、EF 4向けのようです。)

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

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

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

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

この場合、エンティティ コードは EF によって生成されるため、エンティティ コードに C# 属性を配置する上記の方法は使用できません。EF は、フィールドが ID であることを (「それ自体で」) 理解する必要があります。

于 2013-12-25T05:59:52.090 に答える
2

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

モデルに移動します。テーブルを探します。主キー フィールドのプロパティをクリックします。そしてプロパティを変更します。

于 2017-11-01T14:17:40.597 に答える