0

我知道默認情況下EF代碼優先設置StoreGeneratedPattern = Identit。沒關係。但我想通過sql腳本插入一部分數據。我知道,在時間只有一個表可以SET IDENTITY_INSERT Rules ON;EF4通過腳本插入數據

但是當我嘗試運行

USE [GameDatabase] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

--RULES OF GAME 
SET IDENTITY_INSERT RulesOfGames ON; 
INSERT INTO RulesOfGames(RulesOfGameId, MaxScore, IsPossibleEqualsScore) VALUES(1, 20, 1); 
SET IDENTITY_INSERT RulesOfGames OFF; 

--KindSport 
SET IDENTITY_INSERT RulesOfGames ON; 
INSERT INTO KindSports(KindSportId, Name, RulesOfGame_RulesOfGameId) VALUES(1, 'Футбол', 1); 
SET IDENTITY_INSERT KindSports OFF; 

我得到的錯誤。我想設置特定的ID來設置特定的邏輯約束。

Msg 8107, Level 16, State 1, Line 3 
IDENTITY_INSERT is already ON for table 'GameDatabase.dbo.KindSports'. Cannot perform SET operation for table 'RulesOfGames'. 

我該如何解決我的問題?

+0

嘗試在兩個插入語句塊之間放置一個「GO」。 – 2013-03-26 19:35:14

+0

@ Love2Learn違反PRIMARY KEY約束'PK_dbo.RulesOfGames'。不能在對象'dbo.RulesOfGames'中插入重複鍵。 該聲明已被終止。 – Ray 2013-03-26 19:40:13

+1

沒關係,問題在於您將dbo.KindSports的Identity_Insert設置爲ON,並且未將其關閉,並且第二個插入塊中的代碼中存在拼寫錯誤,插入被重新設置爲ON爲RulesOfGames而不是KindSports。修復拼寫錯誤,突出顯示底部行並自行運行以清除身份插入設置,並且它應該可以工作。 – 2013-03-26 19:40:25

回答

0
SET IDENTITY_INSERT RulesOfGames ON; 
INSERT INTO RulesOfGames(RulesOfGameId, MaxScore, IsPossibleEqualsScore) VALUES(1, 20, 1); 
SET IDENTITY_INSERT RulesOfGames OFF; 

--KindSport 
SET IDENTITY_INSERT KindSports ON; 
INSERT INTO KindSports(KindSportId, Name, RulesOfGame_RulesOfGameId) VALUES(1, 'Футбол', 1); 
SET IDENTITY_INSERT KindSports OFF;