13

SQLServerデータベースがあります。このデータベースには、Itemというテーブルがあります。アイテムには「ID」というプロパティがあります。IDは私のテーブルの主キーです。この主キーは、増分値が1のintです。レコードを挿入しようとすると、次のようなエラーが表示されます。

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

次のコードを使用してレコードを挿入しようとしています。

  public int AddItem(Item i)
  {
    try
    {
      int id = 0;
      using (DatabaseContext context = new DatabaseContext())
      {
        i.CreatedOn = DateTime.UtcNow;
        context.Items.InsertOnSubmit(i);
        context.SubmitChanges();
        id = i.ID;
      }
      return id;
    }
    catch (Exception e)
    {
      LogException(e);
    }
  }

送信する前にi.IDを見ると、i.IDが0に設定されていることがわかります。これは、IDとして0を挿入しようとしていることを意味します。しかし、どうあるべきかわかりません。誰かが私を助けることができますか?

ありがとう!

4

6 に答える 6

10

モデルがアイデンティティであるという事実を認識していないかのように単純に聞こえます。ID列は db 生成 (UI または xml) としてマークされ、Auto Generated ValueおそらくIsDbGenerated主キーとしてマークされます。次に、それを挿入しようとせず、書き込まれた後に値を正しく更新します。

于 2011-05-26T13:25:04.620 に答える
7

クラスID内のプロパティをチェックして、次のような属性があることを確認します。Item

[Column(Storage="_ID", AutoSync=AutoSync.OnInsert,
    DbType="INT NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]

見てくださいIsDbGenerated=true、それはここで重要な人です。

DatabaseContextSQL Serverで調整する前に、デザイナを使用して作成したIDENTITY可能性があるため、このクラスを再生成します(デザイナでテーブルを削除し、サーバーエクスプローラから再度ドロップします)。

于 2011-05-26T13:32:49.687 に答える
7

ID プロパティの「Auto Generated」プロパティを「True」に設定します。

于 2011-05-26T13:24:58.443 に答える
2

context.SubmitChanges(); を呼び出すまで、ID はゼロになります。コードをステップ実行して、SubmitChanges が呼び出された後の値を確認します。DB が実際に ID を割り当てていることを思い出してください (自動インクリメント キーであると仮定します)。

これを見てください:

エンティティ キーの操作

于 2011-05-26T13:23:43.127 に答える
0

IDがデータベースで生成されることをマッピングで定義する必要があります。これを行う方法は、使用しているマッピングのタイプによって異なります。コード属性を使用している場合は、プロパティのfor (またはXMLマッピング)で必ず指定IsDbGeneratedしてください。dbmlファイルを使用している場合は、自動生成値がtrueに設定されていることを確認してください。ColumnAttributeId

于 2011-05-26T13:27:31.343 に答える
0

最も簡単な方法は次のとおりです。 1. dbml を開きます 2. 挿入するクラスを選択します 3. 主キーを持つ列を選択します 4. プロパティ ウィンドウで [自動生成プロパティ] をオンにします (True に設定する必要があります)。

于 2014-08-03T09:21:25.940 に答える