我们正在使用C#。 VS2012,EF 5.0和Oracle 11g。方法首先是代码。我有一个已定义的表,在查看使用所有正确列(并且没有不存在的列)的代码时,它清晰可见。
但是,当我运行某些LINQ查询(连接)并尝试将结果选择到一个新对象时,事情就会中断。这是LINQ:
IQueryable<CheckWage> query =
from clientWage in context.ClientWages
join paycheckWage in context.PaycheckWages
on
new {clientWage.PermanentClientId, clientWage.WageId} equals
new {paycheckWage.PermanentClientId, paycheckWage.WageId}
where
(paycheckWage.PermanentClientId == Session.PermanentClientId) &&
(clientWage.PermanentClientId == Session.PermanentClientId)
select new CheckWage
{
CWage = clientWage,
PWage = paycheckWage
};
现在,这是它发出的SQL(由Devart的DbMonitor工具捕获):
SELECT
"Extent1".ASSOCIATE_NO,
"Extent1".PCLIENT_ID,
"Extent1".CLIENT_NO,
"Extent1".CLIENT_NAME,
"Extent1".ADDRESS1,
"Extent1".ADDRESS2,
"Extent1".CITY,
"Extent1".STATE,
"Extent1".ZIP,
"Extent1".COUNTRY,
"Extent1".CLIENT_TYPE,
"Extent1".DOING_BUSINESS_AS,
"Extent1".CONTACT,
"Extent1".PHONE,
"Extent1".EXTENSION,
"Extent1".FAX,
"Extent1".FAX_EXTENSION,
"Extent1".EMAIL,
"Extent1".NEXTEMP,
"Extent1".PAY_FREQ,
"Extent1".EMPSORT,
"Extent1".DIVUSE,
"Extent1".CLIENT_ACCESS_TYPE,
"Extent1".AUTOPAY_WAGE_ID,
"Extent1".FEIN,
"Extent1".HR_MODULE,
"Extent1".BANK_CODE,
"Extent1".ACH_DAYS,
"Extent1".ACH_COLLECT,
"Extent1".UPDATED,
"Extent1".IAT_FLAG,
"Extent1".ORIG_EMAIL,
"Extent1"."R1",
"Extent1"."R2"
FROM INSTANTPAY.CLIENT "Extent1"
WHERE "Extent1".PCLIENT_ID = :EntityKeyValue1'
没有像#34; R1&#34;和&#34; R2。&#34;我猜测是否与连接到具有两个属性的新对象类型有关,但是我想把我的头发弄出来试图弄清楚我做了什么或者没有完成导致这个错误的SQL。当然,来自Oracle服务器的错误是&#34; ORA-00904:&#34; Extent1&#34;。&#34; R2&#34;:无效的标识符。&#34;奇怪的是,它并没有在R1上窒息,但也许它只列出了最后一个错误或什么......
提前致谢, 彼得
2014年5月23日:我遗漏了一个重要的细节。当我尝试钻入其中一个CheckWage对象(使用延迟加载)时会发出SQL,因为两个包含的对象都有一个导航属性到&#34;客户端&#34;实体。我可以在不使用连接的其他LINQ查询中很好地访问客户端表,只有这一个创建了&#34; R1&#34;和&#34; R2&#34;在SELECT语句中。
彼得