我正在尝试使用 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/