1

SQL シーケンスに問題があり、それを使用するのは初めてです。SQLシーケンスNOCACHEパラメータについて何かがあり ます。

インデックスが連続している必要があるため、キャッシュなしでSQLでシーケンスを作成しました(大きな問題は、挿入後に主キー値が必要であるため、新しいオブジェクトを作成して別のテーブルに挿入できることです) )。
これも自動インクリメントする必要がある私のシーケンスです。

CREATE SEQUENCE TestSequence
AS INT
START WITH 1
INCREMENT BY 1
NO CACHE

そして、これは私のテーブルで、myTableId - 主キー

 CREATE TABLE database.dbo.myTable
            (myTableId INT NOT NULL,
         name VARCHAR(10))
GO
ALTER TABLE dbo.myTable
ADD DEFAULT NEXT VALUE FOR dbo.TestSequence FOR myTableId
GO

SQLで挿入ステートメントを作成すると完全に機能します(SQL接続も再起動し、その後myTableIdは数字にジャンプしませんでした)が、.netから挿入すると、自動インクリメントを認識しないようです:

  • 最初の挿入時に、インデックスは値 0 を取得し (??? 1 である必要があります)、その後、次のエラーが表示されます:「PRIMARY KEY 制約 'PK_myTable' の違反。オブジェクト 'dbo.myTable' に重複キーを挿入できません。重複するキーの値は (0) です。\r\n ステートメントは終了しました。"

    2 番目のオブジェクトには最初のオブジェクトと同じ myTableId があるためです。これは私のコードです:

     myTable myNewObject = new myTable{name = "dada"};
      _db.myTable.Add(myNewObject);
      _db.SaveChanges();
     int id = myNewObject.myTableId; //here i'm getting the foreign-key value that i need
    

関係あるかわかりませんが、SQL 2012 と MVS 2012 ( Entity Framework ) を使っています。

私の間違いがどこにあるのか、何が欠けているのか分かりますか? ありがとうございました

4

0 に答える 0