无效的对象名称,临时表实体框架

时间:2014-08-17 23:58:52

标签: sql-server entity-framework

我正在尝试优化我的应用程序中的某些进程,但我遇到了这个问题。我的应用程序正在运行,因此实体映射是正确的。简化我想要做的是:

using (var offCtx = new CheckinOfflineEntities())
{
    using (var trans = offCtx.Database.BeginTransaction(IsolationLevel.Snapshot))
    {
         DateTime purgePivot = DateTime.Now.AddDays(-2);
         count = offCtx.Database.ExecuteSqlCommand(@"select L.* into #NewLegs from InventoryLeg L where L.STDUTC >= {0}", purgePivot);
         long d = offCtx.Database.SqlQuery<long>("select count(*) from #NewLegs").FirstOrDefault();
    }
}

我从一个表中选择了一些要删除的数据,并将其存储在临时表中,以便我可以在其他查​​询中使用此临时表来排除相关数据。

问题是,当我尝试使用临时表时,我收到异常SqlException:“无效的对象名称'#NewLegs'。”

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

您可以像这样合并查询。

计数返回int,不长。

  

COUNT始终返回int数据类型值。 - MSDN

var query = string.Format("{0} {1}",
    @"select L.* into #NewLegs from InventoryLeg L where L.STDUTC >= @STDUTC",
    @"select count(*) from #NewLegs")
var d = offCtx.Database.SqlQuery<int>(query, new SqlParameter("STDUTC", purgePivot))
    .FirstOrDefault();

答案 1 :(得分:0)

我真的不知道为什么但删除参数并在查询中添加它解决了问题。

以下代码可以正常使用:

using (var offCtx = new CheckinOfflineEntities())
{
    using (var trans = offCtx.Database.BeginTransaction(IsolationLevel.Snapshot))
    {
         DateTime purgePivot = DateTime.Now.AddDays(-2);
         count = offCtx.Database.ExecuteSqlCommand(@"select L.* into #NewLegs from InventoryLeg L where L.STDUTC >= " + purgePivot.toString("yyyy-mm-dd HH:mm:ss");
         long d = offCtx.Database.SqlQuery<long>("select count(*) from #NewLegs").FirstOrDefault();
    }
}