为什么EntityFramework Raw SqlQuery使用不需要的值返回MySql中的对象?

时间:2018-04-06 21:55:06

标签: c# mysql entity-framework-6 mysql-connector

当我针对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,starttime
1,&#39; 2017-12-01 22:56:38&#39;
2,&#39; 2017-12-01 22:56:33&#39;
3,&#39; 2017-12-01 22:56:44&#39;
4,&#39; 2017-12-01 22:56:14&#39;
5,&#39; 2017-12-01 22:56:49&#39;
6,&#39; 2017-12-01 22:56:34&#39;
7,&#39; 2017-12-01 22:56:41&#39;
8,&#39; 2017-12-01 22:56:25&#39;
9,&#39; 2017-12-01 22:56:39&#39;

根据EF文档,我想要实现的目标应该是可行的。 EF Documentation from MSDN

从链接:

  

可以使用Database类上的SqlQuery方法创建返回任何类型的实例的SQL查询,包括基本类型。   例如:using(var context = new BloggingContext()){       var blogNames = context.Database.SqlQuery(                          &#34; SELECT name FROM dbo.Blogs&#34;)。ToList(); }

我正在使用EntityFramework 6.1.3和C#,MySql 5.6 for windows,connector .net 6.9.8。我将EF更新到6.2.0(最新),但这并没有解决问题。

我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

KeyValue对类型不正确。它匹配属性名称。您应该使用自定义类型。例如:

编辑:更改了与您的用例匹配的类型

public class MyDto
{
    public int IdCall { get; set; }
    public DateTime StartTime { get; set; }
}

然后您的查询将如下所示:

var rowIdVsDates = dbContext.Database.SqlQuery<MyDto>(sql).ToList();