2016-07-25 35 views
1

我想用Entity Framework執行三個原始查詢。如何創建臨時表並將其用於與Entity Framework相同的連接?

第一個查詢基本上會創建一個臨時表。第二個查詢將在臨時表上添加一個索引。最後,第二個查詢將加入臨時表到其他表以獲取最終數據集。

但每次我跑我的代碼時,出現以下錯誤

無效#allRecords對象。

這裏是我做了什麼

using (BaseContextdb = new BaseContext()) 
{ 
    using (var dbContextTransaction = db.Database.BeginTransaction()) 
    { 
     try 
     { 
      db.Database.ExecuteSqlCommand("SELECT col1, col2, col3 " + 
              "INTO #allRecords " + 
              "FROM someTable " + 
              "WHERE col5 = 'blab' " + 
              "CREATE INDEX d ON #allRecords(col1, col2); "); 

      var results = db.Database.SqlQuery<ResuleModel>(this.GetQuery()).ToList(); 

      db.SaveChanges(); 

      dbContextTransaction.Commit(); 
     } 
     catch (Exception) 
     { 
      dbContextTransaction.Rollback(); 
     } 
    } 
} 

我怎麼能正確地創建臨時表與實體框架?

修訂

這裏是由this.GetQuery()

SELECT b.*, c.* 
FROM b 
INNER JOIN #allRecords AS a ON a.col1 = v.col1 AND a.col2 = b.col2 
INNER JOIN c ON c.Id= b.Id 
... 
... 
... 
+0

嘗試使用類的表屬性,所以[表(「#allRecords」)]公共類ResuleModel {} ... –

+0

我會在哪裏使用它? – Jaylen

+0

關於ResuleModule類,請參閱http://stackoverflow.com/questions/20184644/howto-specify-table-name-with-entity-framework-code-first-fluent-api作爲示例 - 第二個答案。不,我沒有一個具體的原因,爲什麼我選擇這個鏈接問題,因爲當我谷歌首先使用表格屬性使用示例 –

回答

1

實體框架返回不使用臨時表以及工作查詢。

相反,你可能想看看Dapper。它更清潔;此外,您可以在同一個項目中並排使用EF和Dapper。例如,

using (IDbConnection conn = new SqlConnection(DataBaseConnectionString)) 
{ 
    conn.Open(); 

    // If you want transaction, place it inside the query. 
    var entities = conn.Query<ResuleModel>(@"SELECT col1, col2, col3 ..."); 

    result = entities.ToList(); 
} 

FYI:確保在小巧玲瓏使用前執行在SSMS查詢。

+0

[https://www.google.com/search?q=what%20is%20SSMS](https://www.google.com/search?q =什麼%圖20是%20SSMS) – Win

相關問題