我正在使用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();
我在ResultList中收到结果。我收到43个对象是正确的,因为我的存储过程返回43行。但我没有得到这些对象属性的值。所有属性值都设置为0或null.it似乎我的ResultList对象没有初始化。
我不知道如何正确调用我的存储过程并将其结果集检索到我的应用程序中。
请帮忙。
答案 0 :(得分:1)
我使用了一些技巧。
创建一个与您的过程返回的数据具有相同数据结构的视图,并将其添加到您的edmx中。它不一定是合乎逻辑的。可以像:
选择1作为AccountId,&#39; ABC&#39;作为AccountName,(...)来自x;
只要它具有正确的数据类型。但是,如果您的程序只过滤了一些您可以放入视图的数据,我建议您进行有意义的视图。
在EF中映射您的过程时,选择映射视图作为返回类型。
您不必从程序中返回视图。只要具有与视图匹配的结构,您就可以返回任何数据。
在C#中,您的程序现在将返回一组视图项。
这在MSSQL上对我有用,所以如果你设法在MySQL上启动它,请告诉我。