1

VB .NET 4 WinForms アプリケーション。

IEnumerable(Of MyClass) にバインドされた (DevExpress) グリッドがあります。新しい行が追加されるたびに、ID はデフォルトでゼロ (0) になります。SaveChanges を試みると、EntityFramework は、ID フィールドであるということは、挿入時にコンテンツを無視し、他の値を挿入する必要があることを意味することに気付きません。null / Nothing を指定することはできません。ID をゼロのままにしておくためです。

MyClass のインスタンスを手動で追加および保存できますが、グリッドが新しいエントリの追加/初期化などを処理する場所で動作するようにしようとしています。私が知る限り、問題はグリッドではなく、Entity Framework と生成された SQL およびエンティティ クラスにあります。

{"Cannot insert explicit value for identity column in table 'MyClasses' when IDENTITY_INSERT is set to OFF."}

ラップトップを窓から投げ出さないようにするための支援をいただければ幸いです。

4

1 に答える 1

4

エンティティのプロパティがIdentityデータベース内の (自動インクリメント値) である場合は、エンティティ モデルの StorageModel で指定されます。おそらく、この設定は特定のフィールドでは正しくありません。これは、モデルの edmx ファイルを開いてセクションを調べることで確認できますStorageModels。次のようになります。

<edmx:StorageModels>
  ...
  <EntityType Name="MyClass">
    <Key>
      <PropertyRef Name="ID" />
    </Key>
    <Property Name="ID" Type="..." Nullable="..." StoreGeneratedPattern="Identity" />
    ...
  </EntityType>
  ...
</edmx:StorageModels>

StoreGeneratedPatternに設定する必要がありますIdentity。属性がある場合None、または属性が欠落している場合 (デフォルトはNone)、実際に説明したエラーが発生します。この場合、EntityFramework はそれIDが ID であることを認識せず、生成された SQL-INSERT ステートメントで列の値を発行するためです。

edmx:StorageModels( edmxファイルのセクションを本当にチェックしていることを確認してください。edmx:ConceptualModelsセクションにはプロパティにも属性annotation:StoreGeneratedPatternがありますが、その設定は特定の問題には関係ありません。(データベースがモデルから作成される場合にのみ重要だと思います、 確信はないけど。))

于 2010-06-20T16:10:10.293 に答える