C# 仅在一台计算机上出现Linq、NpqSql和实体框架问题

C# 仅在一台计算机上出现Linq、NpqSql和实体框架问题,c#,.net,linq,entity-framework,ef-postgresql,C#,.net,Linq,Entity Framework,Ef Postgresql,我们有一个已成功运行postgresql web应用程序的环境 运行在.NET4.0上的实体框架 不知何故,仅在我的机器上,一个Linq查询失败,而在其他机器上成功。以下是linq查询,其上下文并不特别重要。关键是,它在其他机器上工作,而不是在我的机器上。此外,我的机器可以成功地执行插入等操作,但不能执行这一特定操作 ((SEntities)Context).c_app.MergeOption = MergeOption.AppendOnly; app = (((from rec in ((SE

我们有一个已成功运行postgresql web应用程序的环境 运行在.NET4.0上的实体框架

不知何故,仅在我的机器上,一个Linq查询失败,而在其他机器上成功。以下是linq查询,其上下文并不特别重要。关键是,它在其他机器上工作,而不是在我的机器上。此外,我的机器可以成功地执行插入等操作,但不能执行这一特定操作

((SEntities)Context).c_app.MergeOption = MergeOption.AppendOnly;
app = (((from rec in ((SEntities) Context).c_application
     where rec.app_id == CStatus.app_id
        select rec) as ObjectQuery<c_application>)
        .Include("c_status")
        .Include("c_tasks")
        .Include("c_product")
        .Include("c_acct")
    ).SingleOrDefault();
((senties)Context).c_app.MergeOption=MergeOption.AppendOnly;
app=((从(senties)上下文中的rec)。c_应用程序
其中rec.app_id==CStatus.app_id
选择rec)作为对象(查询)
.包括(“c_状态”)
.包括(“c_任务”)
.包括(“c_产品”)
.包括(“c_账户”)
).SingleOrDefault();
在同事的机器上,在同一服务器配置中运行的新签出会产生成功的结果

然而,在我身上,以下是我得到的例外:

System.Exception{System.Data.EntityCommandExecutionException}

内部异常:
{“ERROR:42601:在\“LEFT\”}系统或其附近发生语法错误。异常{Npgsql.NpgsqlException}

如果我查看出现的调试窗口中的errorSQL条目,就会创建一个巨大的SQL,其中包含“select….limit 2 left join…”,这是无效的,并且是错误发生的地方

问题是,为什么这只发生在我的机器上,我的编译代码被部署到其他机器上,和/或在工作的同事身上执行相同的代码?我们最近升级到了64位应用程序池,但DLL是随它一起部署的,从输出来看,是正确的

很明显,我在我的机器上丢失了一些东西,但它不在我们的源代码中,所以可能是iis配置或gac中的某些东西导致了问题

编辑:

尽管进行了检查,但当我进行VisualStudio的开发人员预览安装时,我已经安装了4.5。因为4.5是从4.0的就地升级,所以尽管是4.5,我还是错过了上面提到的“目标4.0”的所有内容。显然,微软在4.5中为Entity Framework(或制造更多)修复了一系列错误,这就是其中之一。其他人也有类似的问题,所以不确定这是4.0中的错误还是4.5中引入的错误

以下内容修复了上述问题,适用于任何可能

string sql = "SELECT VALUE a FROM c_application AS a WHERE a.app_id = @appId";
ObjectParameter[] queryParams = { new ObjectParameter("appId", CStatus.app_id) };
ObjectQuery<c_application> query = Context.CreateQuery<c_application>(sql, queryParams).Include("c_status").Include("c_tasks").Include("c_product").Include("c_acct");
CApplicationDao cApplicationDao = new CApplicationDao();
SetupDao<c_application>(cApplicationDao);
query.MergeOption = MergeOption.AppendOnly;
app = credApplicationDao.FindSingle(query);
string sql=“从c_应用程序中选择值a作为其中的a.app_id=@appId”;
ObjectParameter[]queryParams={newObjectParameter(“appId”,CStatus.app_id)};
ObjectQuery query=Context.CreateQuery(sql,queryParams)。包括(“c_状态”)。包括(“c_任务”)。包括(“c_产品”)。包括(“c_账户”);
CApplicationDao CApplicationDao=新的CApplicationDao();
SetupDao(cApplicationDao);
query.MergeOption=MergeOption.AppendOnly;
app=credApplicationDao.FindSingle(查询);

两台机器之间安装的.net framework版本是否相同?所有机器上的Npgsql数据提供程序版本是否相同?您是连接到一台服务器,还是每台都有自己的服务器?所有计算机都连接到同一台服务器,加载同一个dll(包含在Nopgsl的bin目录中,Web.config有数据提供程序),并且所有计算机上都有相同的.Net 4.0。另外,它有点模棱两可,但我编译的代码在其他机器上可以很好地工作,并且可以进行全新的签出工作。显然有些东西被加载了,不应该让一切都不一样,但我不知道它是什么。