c# - 如何创建一个临时表并在与 Entity Framework 的相同连接中使用它?

标签 c# sql sql-server entity-framework entity

我正在尝试使用 Entity Framework 执行三个原始查询。

第一个查询基本上会创建一个临时表。第二个查询将在临时表上添加一个索引。最后,第二个查询将临时表连接到其他表以获得最终数据集。

但是每次我运行我的代码,都会得到以下错误

invalid #allRecords object.

这是我做的

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

如何使用 Entity Framework 正确创建临时表?

已更新

这是 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
...
...
...

最佳答案

Entity Framework 不适用于临时表。

相反,您可能想看看 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();
}

仅供引用:确保先在 SSMS 中执行查询,然后再在 Dapper 中使用它。

关于c# - 如何创建一个临时表并在与 Entity Framework 的相同连接中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38579000/

相关文章:

c# - 使用默认构造函数初始化数组

c# - 使用 Caliburn.Micro 将 View 模型中的图像加载到 View 中

sql - 使用 St_ExteriorRing 或类似的方法在 Multipolygon geojson 中填充 'holes'

当前打卡员工的 SQL 列表

SQL 将 id 连接成特定顺序

sql - 仅为特定用户启用 SQL Server 的 TCP 连接

c# - 具有单个上下文的 OpenTK 多个 GLControl

c# - C# 的 VS 2008 VB 片段

sql - postgresql 将数组聚合成一个包含所有元素并集的数组

mysql - SQL 中具有相似日期的行分组在一起