2017-11-12 16 views
0

수동 마이그레이션에서 새 테이블을 채우려고합니다.SQL Server CE 용 Entity Framework에서 정적 ID를 사용하여 값을 삽입하는 방법은 무엇입니까?

테이블을 만들었지 만 삽입하는 데 문제가 있습니다.

var sql = @"CREATE TABLE[DefaultSettings] ([Id] int IDENTITY (1, 1) NOT NULL 
              , [Tag] nvarchar(63) NOT NULL 
              , [ValueInt] int NULL 
              , [ValueDate] datetime NULL 
              , [ValueChar] nvarchar(255) NULL);"; 
dbContext.Database.ExecuteSqlCommand(sql); 

sql = @"ALTER TABLE[DefaultSettings] ADD CONSTRAINT[PK_DefaultSettings] PRIMARY KEY ([Id])"; 
dbContext.Database.ExecuteSqlCommand(sql); 

sql = @"SET IDENTITY_INSERT [DefaultSettings] ON; 
INSERT INTO [DefaultSettings] ([Id], [Tag], [ValueInt], [ValueDate],[ValueChar]) VALUES (1, N'DefaultArea', 58, NULL, NULL); 
INSERT INTO [DefaultSettings] ([Id], [Tag], [ValueInt], [ValueDate],[ValueChar]) VALUES (2, N'DefaultFarm', 52, NULL, NULL); 
GO"; 

dbContext.Database.ExecuteSqlCommand(sql); 
return; 

두 번째 ExecuteSqlCommand 위해 나는 오류가

Error 문은 내가 GO하여 SQL 변수의 모든 명령은 별도의 시도입니다

삽입 얻을 - 내가 아는을 그 SQL 서버 CE 할 수없는 여러 SqlCommand로 .

하지만 "오류 진술 문"과 같은 오류가 나타납니다.

아이디어가 있으십니까?

+1

CONSTRAINT와 [DefaultSettings]간에 TABLE과 [DefaultSettings] 사이에 공백을 추가하기 시작합니다. 코드에서이를 실행하면 GO는 의미가 없습니다. 그것은 단지 명령 사이의 분리 자로 SQL 서버 관리 스튜디오의 IDE로 이해됩니다 – Steve

+0

공백은 중요하지 않습니다 ... 그래서,'sql = @ "SET IDENTITY_INSERT [DefaultSettings] ON; INSERT INTO [DefaultSettings] ([Id ([ID], [태그], [태그], [태그], [태그], [태그], [값], [값], [값], [ValueChar]) VALUES (1, N'DefaultArea ', 58, NULL, NULL)";'got '쿼리를 구문 분석하는 동안 오류가 발생했습니다. [토큰 라인 번호 = 2, 토큰 라인 오프셋 = 1, 토큰 오류 = INSERT]' – Tres

+0

그런 다음 세 번째 ExecuteSqlCommand에 오류가 있습니까? 그런 다음 3 개의 별도 명령으로 명령을 분할해야하며 삽입 후 IDENTITY_INSERT를 OFF로 설정하는 것을 잊지 마십시오. – Steve

답변

1

SQL Server Compact는 명령별로 단일 명령문 만 허용하므로 ExecuteSqlCommand에 대한 INSERT 문당 하나의 호출을 사용해야합니다.

+0

Ok. 하지만, 나는'SET IDENTITY_INSERT [DefaultSettings] ON;을 실행해야한다고 생각한다. 첫 번째 SQL 문에서 실행하면 두 번째 (insert) 문에 오류가 발생한다. 그래서 나는 생각하기를, 나는 exec_insert와 insert를 한 문장으로해야한다. 그러나 나는 모른다, 어떻게 ... – Tres

+0

당신이 시도 : dbContext.Database.BeginTransaction()? 아니면 TransactionScope? – ErikEJ

+0

BeginTransaction 사용 방법에 대한 몇 가지 샘플 코드는 다음과 같습니다. https://msdn.microsoft.com/en-us/library/dn456843(v=vs.113).aspx – ErikEJ