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 ) を使っています。
私の間違いがどこにあるのか、何が欠けているのか分かりますか? ありがとうございました