【发布时间】:2013-01-29 23:53:47
【问题描述】:
我正在尝试在使用 ADO.NET 的项目中查询 Oracle DB(版本 11.2.0.2.0),在 .NET 4 上编译(如果 Windows XP 与之兼容,我将在 .NET 4.5 上编译) ,并使用 linq to 实体来执行查询。我还在使用 Oracle Developer Tools for Visual Studio 和 ODP.NET 版本 11.2.0.3.20。但是,每当在应用程序中执行查询时,我都会返回一个包含不正确数据的对象列表。我所说的不正确数据的意思是:我在实体对象中有 5 个属性,其中两个属性没有设置为实体键。未设置为实体键的两个属性包含返回的所有记录的相同数据......但是当我使用数据库查询客户端手动对数据库进行查询时,我在每条记录的这些列中得到不同的值!
这是我得到的自动生成的代码(使用 DBContext,但我已经验证 ObjectContext 也会发生这种情况):
public partial class EntityObj
{
public string EntityKey1 { get; set; }
public string EntityKey2 { get; set; }
public string EntityKey3 { get; set; }
public Nullable<decimal> NonEntityKey1 { get; set; }
public string NonEntityKey2 { get; set; }
}
这是我对实体的 linq 代码:
using (Entities context = new Entities())
{
string formattedStr = Decimal.Parse(str).ToString();
var objs = (from obj in context.EntityObjs
where obj.Number == formattedStr
orderby obj.EntityKey3 , obj.NonEntityKey2, obj.NonEntityKey1
select obj);
// Process results...
}
以下是我手动执行查询时得到的结果集示例:
以下是我使用 linq to 实体时得到的结果集示例:
为什么我会看到我所看到的结果以及如何修复它以返回正确的数据而不使非实体键字段成为实体键? (它们不能是键,因为它们可以为空)
编辑:
我还应该指出,当我执行以下查询时,我没有看到相同的问题......但我真的希望事情能像我之前所说的那样工作。
using (Entities context = new Entities())
{
string formattedStr = Decimal.Parse(str).ToString();
var objs = (from obj in context.EntityObjs
where obj.Number == formattedStr
orderby obj.EntityKey3 , obj.NonEntityKey2, obj.NonEntityKey1
select new
{
EntityKey1 = obj.EntityKey1,
EntityKey2 = obj.EntityKey2,
EntityKey3 = obj.EntityKey3,
NonEntityKey1 = obj.NonEntityKey1,
NonEntityKey2 = obj.NonEntityKey2
});
// Process results...
}
【问题讨论】:
-
帮助您将结果集添加到您的答案中,并解释它与预期有何不同。
-
@DaveA 我已经添加了这些结果。感谢您的意见。
标签: c# linq oracle ado.net linq-to-entities