为什么来自 MySql 的 EntityFramework Raw SqlQuery returns 对象具有不需要的值?
Why does EntityFramework Raw SqlQuery returns objects from MySql with undesired values?
当我 运行 一个针对 DBContext 的 RawSqlQuery 从 MySql 数据库中获取一个列表对象时,这些对象没有返回它们在数据库中的真实值。查询后列表中的所有对象都具有所有属性的默认值。
代码:
using (var dbContext=new PartnerEntities())
{
string sql = $@"select idcall,starttime from cdr limit 0,100";
List<KeyValuePair<long,DateTime>> rowIdVsDates =
dbContext.Database.SqlQuery<KeyValuePair<long,DateTime>>(sql).ToList();
}
检索到的结果:
Results from debug:
原始数据:
idcall,开始时间
1、'2017-12-01 22:56:38'
2、'2017-12-01 22:56:33'
3、'2017-12-0122:56:44'
4、'2017-12-01 22:56:14'
5、'2017-12-0122:56:49'
6、'2017-12-01 22:56:34'
7、'2017-12-0122:56:41'
8、'2017-12-0122:56:25'
9、'2017-12-0122:56:39'
根据 EF 文档,我想要实现的目标应该是可行的。
EF Documentation from MSDN
来自link:
A SQL query returning instances of any type, including primitive types, can be created using the SqlQuery method on the Database class.
For example: using (var context = new BloggingContext()) {
var blogNames = context.Database.SqlQuery(
"SELECT Name FROM dbo.Blogs").ToList(); }
我在 C# 中使用 EntityFramework 6.1.3,在 windows 中使用 MySql 5.6,连接器 .net 6.9.8。我将 EF 更新到 6.2.0(最新),但这并没有解决问题。
我们将不胜感激。
键值对类型不正确。它匹配 属性 名称。您应该改用自定义类型。例如:
编辑:更改类型以匹配您的用例
public class MyDto
{
public int IdCall { get; set; }
public DateTime StartTime { get; set; }
}
那么您的查询将如下所示:
var rowIdVsDates = dbContext.Database.SqlQuery<MyDto>(sql).ToList();
当我 运行 一个针对 DBContext 的 RawSqlQuery 从 MySql 数据库中获取一个列表对象时,这些对象没有返回它们在数据库中的真实值。查询后列表中的所有对象都具有所有属性的默认值。
代码:
using (var dbContext=new PartnerEntities())
{
string sql = $@"select idcall,starttime from cdr limit 0,100";
List<KeyValuePair<long,DateTime>> rowIdVsDates =
dbContext.Database.SqlQuery<KeyValuePair<long,DateTime>>(sql).ToList();
}
检索到的结果:
Results from debug:
原始数据:
idcall,开始时间
1、'2017-12-01 22:56:38'
2、'2017-12-01 22:56:33'
3、'2017-12-0122:56:44'
4、'2017-12-01 22:56:14'
5、'2017-12-0122:56:49'
6、'2017-12-01 22:56:34'
7、'2017-12-0122:56:41'
8、'2017-12-0122:56:25'
9、'2017-12-0122:56:39'
根据 EF 文档,我想要实现的目标应该是可行的。 EF Documentation from MSDN
来自link:
A SQL query returning instances of any type, including primitive types, can be created using the SqlQuery method on the Database class. For example: using (var context = new BloggingContext()) { var blogNames = context.Database.SqlQuery( "SELECT Name FROM dbo.Blogs").ToList(); }
我在 C# 中使用 EntityFramework 6.1.3,在 windows 中使用 MySql 5.6,连接器 .net 6.9.8。我将 EF 更新到 6.2.0(最新),但这并没有解决问题。
我们将不胜感激。
键值对类型不正确。它匹配 属性 名称。您应该改用自定义类型。例如:
编辑:更改类型以匹配您的用例
public class MyDto
{
public int IdCall { get; set; }
public DateTime StartTime { get; set; }
}
那么您的查询将如下所示:
var rowIdVsDates = dbContext.Database.SqlQuery<MyDto>(sql).ToList();