我正在动态地构建一个包含不同列数的select查询。
select
a as col0,
b as col1,
...,
c as coln
...查询应该是检索整数矩阵。
在使用ObjectContext.ExecuteStoreQuery执行查询时,我得到了正确的行数,但每行似乎都是空的。
这是我的代码:
var lines = context.ExecuteStoreQuery<List<int>>(queryString).AsEnumerable()我怎么能让它起作用呢?
我发现here应该在这类事情上使用ADO.NET。
发布于 2014-11-19 16:03:31
不幸的是,实体框架6在内部映射代码中没有很大的灵活性,因此它无法将SQL结果映射到您的List<int>或任何其他基本类型集合。
要理解它为什么不能这样做,您需要知道EF6在内部使用DbDataReader读取SQL结果,然后从预期的泛型结果类型(在您的示例中,类型是泛型列表)构建ColumnMap,并使用ColumnMap动态地将ColumnMap结果转换为结果对象,以了解要映射到对象的属性的列。
根据我上面的解释,EF6 ExecuteStoreQuery方法试图映射您的列("a",“b”..etc)。到List对象属性,而且由于类中没有匹配您的结果列名的属性,所以它无法映射它为。
这些限制使ADO.NET成为动态列最简单的选项之一。您可以使用如下代码中的DbDataReader:
var arr = new List<int>();
using (var md = new Context())
{
var conn = md.Database.Connection;
conn.Open();
using (IDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select Col1,Col2 from Entities";
using (var reader = (DbDataReader)cmd.ExecuteReader())
{
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
arr.Add(reader.GetInt32(i));
}
}
}
}
}https://stackoverflow.com/questions/27017811
复制相似问题