Необработанная команда SQL не выполняется с использованием Entity Framework
У меня проблемы с заполнением данных с использованием следующей необработанной команды SQL и структуры сущностей
databaseContext.Database.ExecuteSqlCommand
(@"INSERT INTO NatureOfBusinessRiskClass
( ProductSectionId ,
NatureOfBusinessId ,
RiskClassId ,
ConstructionType ,
AreaType ,
SumInsuredLimit ,
MaximumRate ,
MinimumRate ,
IsAggregated ,
CreatedBy ,
CreateDate)
SELECT P.Id,T.NatureOdBusinessId,T.RiskClassId,ConstructionType,AreaType,0.00,
0,0,0,1,GETDATE() FROM TempNatureBusiness T
CROSS JOIN TempAreaType A
CROSS JOIN TempConstructionType C
CROSS JOIN ProductSection P");
Когда я выполняю этот оператор SQL в Microsoft SQL Server Management Studion, все работает должным образом, но когда я использую структуру сущностей, таблицы не заполняются, и исключение не создается.
1 ответ
Проблема заключалась в том, что я также использовал команды RAW sql для заполнения таблиц, на которые опирается этот запрос, например, для генерации его содержимого.
databaseContext.Database.ExecuteSqlCommand("INSERT INTO TempAreType...");
databaseContext.Database.ExecuteSqlCommand("INSERT INTO TempConstructionType...");
Затем я выполнил команду, с которой у меня проблемы,
databaseContext.Database.ExecuteSqlCommand
(@"INSERT INTO NatureOfBusinessRiskClass
( ProductSectionId ,
NatureOfBusinessId ,
RiskClassId ,
ConstructionType ,
AreaType ,
SumInsuredLimit ,
MaximumRate ,
MinimumRate ,
IsAggregated ,
CreatedBy ,
CreateDate)
SELECT P.Id,T.NatureOdBusinessId,T.RiskClassId,ConstructionType,AreaType,0.00,
0,0,0,1,GETDATE() FROM TempNatureBusiness T
CROSS JOIN TempAreaType A
CROSS JOIN TempConstructionType C
CROSS JOIN ProductSection P");
В конце я выполнил
databaseContext.SaveChanges();
Очевидно, этот statemnent будет вносить изменения в мою базу данных, поэтому TempAreaType
а также TempConstructionType
Таблицы не имели никаких данных при выполнении третьей команды. Когда я выполнил команду в студии Microsoft SQL Server Management, мои изменения уже были внесены в базу данных, и команда сработала.
Решением было назвать
databaseContext.SaveChanges();
после первых команд, а затем снова в конце, например,
databaseContext.Database.ExecuteSqlCommand("INSERT INTO TempAreType...");
databaseContext.Database.ExecuteSqlCommand("INSERT INTO TempConstructionType...");
databaseContext.SaveChanges();
databaseContext.Database.ExecuteSqlCommand
(@"INSERT INTO NatureOfBusinessRiskClass
( ProductSectionId ,
NatureOfBusinessId ,
RiskClassId ,
ConstructionType ,
AreaType ,
SumInsuredLimit ,
MaximumRate ,
MinimumRate ,
IsAggregated ,
CreatedBy ,
CreateDate)
SELECT P.Id,T.NatureOdBusinessId,T.RiskClassId,ConstructionType,AreaType,0.00,
0,0,0,1,GETDATE() FROM TempNatureBusiness T
CROSS JOIN TempAreaType A
CROSS JOIN TempConstructionType C
CROSS JOIN ProductSection P");
databaseContext.SaveChanges();