C# 实体框架存储过程单个结果集

C# 实体框架存储过程单个结果集,c#,mysql,.net,entity-framework,stored-procedures,C#,Mysql,.net,Entity Framework,Stored Procedures,我正在使用MySQL存储过程,并尝试使用EF6检索单个结果集。我的存储过程包含简单的select语句,我已将其映射到我的模型中。下面是EF生成的映射到我的存储过程的类 public partial class usp_aggregatedLogs_Result { } 它是由EF生成的空类。我已将属性添加到此类,以将其映射到存储过程返回的结果集 public partial class usp_aggregatedLogs_Result { public int Accoun

我正在使用MySQL存储过程,并尝试使用EF6检索单个结果集。我的存储过程包含简单的select语句,我已将其映射到我的模型中。下面是EF生成的映射到我的存储过程的类

public partial class usp_aggregatedLogs_Result
{ 
}  
它是由EF生成的空类。我已将属性添加到此类,以将其映射到存储过程返回的结果集

 public partial class usp_aggregatedLogs_Result
 {
    public int AccountId { get; set; }
    public string AccountName { get; set; }
    public string ProjectId { get; set; }
    public string ProjectName { get; set; }
    public string SystemId { get; set; }
    public string SystemName { get; set; }
    public string ParameterId { get; set; }
    public string ParameterName { get; set; }
    public Nullable<System.DateTime> TimeStamp { get; set; }
    public long LogId { get; set; }
    public string Type { get; set; }
}
下面是EF在DBContext类中生成的代码

public virtual ObjectResult<usp_aggregatedLogs_Result> usp_aggregatedLogs(Nullable<System.DateTime> dateFrom, Nullable<System.DateTime> dateTo)
    {
        var dateFromParameter = dateFrom.HasValue ?
            new ObjectParameter("DateFrom", dateFrom) :
            new ObjectParameter("DateFrom", typeof(System.DateTime));

        var dateToParameter = dateTo.HasValue ?
            new ObjectParameter("DateTo", dateTo) :
            new ObjectParameter("DateTo", typeof(System.DateTime));

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<usp_aggregatedLogs_Result>("usp_aggregatedLogs", dateFromParameter, dateToParameter);
    }
我假设调用此函数应该返回存储过程返回的结果集。我这样称呼它

List<usp_aggregatedLogs_Result> ResultList= obj.usp_aggregatedLogs(DateFrom, DateTo).ToList();
我在结果列表中收到结果。我收到43个对象,这是正确的,因为我的存储过程返回43行。但是我没有得到这些对象的属性值。所有属性值都设置为0或null。似乎我的ResultList对象未初始化

我不知道如何正确调用存储过程并将其结果集检索到应用程序中


请帮忙

我用了一点技巧

创建与过程返回的数据具有相同数据结构的视图,并将其添加到edmx中。它不需要任何合乎逻辑的东西。可以是:

选择1作为AccountId,选择ABC作为AccountName。。。从x

只要它有正确的数据类型。但是,如果您的过程只过滤一些可以放入视图中的数据,我建议您使用有意义的完整视图

在EF中映射过程时,选择映射视图作为返回类型

您不必从过程返回视图。您可以返回任何数据,只要它具有与视图匹配的结构

在C中,您的过程现在将返回视图项的集合


这在MSSQL上对我很有效,所以如果你能在MySQL上启动它,请告诉我。

你使用db优先的方法吗?您不能仅仅更改设计器生成的类。您必须在edmx中具有正确的映射。如果您现在刷新您的过程映射,您的自定义代码将显示。我使用的是db_优先方法。但是EF针对我的过程生成了一个空类。我如何正确地映射它?您好,Grzegorz W我无法理解您在EF中映射过程时提到的步骤2选择映射视图作为返回类型。我尝试过你的方法我创建了一个视图,它的结果集与我的过程完全相同,我将它映射到我的EF中,我将函数的返回类型从ObjectResult更改为ObjectResult,它在运行时给我一个异常,即函数返回的类型不同。