2014-10-27 67 views
0

我有麻烦使用以下原料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"); 

当我执行Microsoft SQL Server管理Studion一切都在这个SQL语句播种数据,但当我使用实体框架时,表格不会被填充,也不会产生异常。

+0

使用SQL Profiler来检查是否使用相同的查询,如果它执行与其他SQL用户,请确保权限给予 – 2014-10-27 06:21:26

+0

@ user65439试试这个:'Var rowsaffected = databaseContext.Database.ExecuteSqlCommand(....);' – 2014-10-27 06:29:04

回答

0

的问题是,我还使用了RAW 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"); 

最后我执行

databaseContext.SaveChanges(); 

显然,这statemnent将提交我的数据库更改,因此TempAreaTypeTempConstructionType表在执行第三个命令时没有任何数据。当我在Microsoft SQL Server Management Studio中执行commadn时,我的更改已被提交到数据库,并且该命令已运行。

的解决方案是调用

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();