为什么来自 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();