gpt4 book ai didi

c# - 使用 SqlQuery 处理来自存储过程的多个结果

转载 作者:太空狗 更新时间:2023-10-29 20:04:37 26 4
gpt4 key购买 nike

我有一个存储过程,它返回多组结果(两个表)。我这样调用存储过程:

var result = context.Database.SqlQuery<RefererStatisticResult>(
"exec [dbo].[GetReferrer] @StartDate, @EndDate, @Source",
this.CreateInParam("@StartDate", SqlDbType.DateTime, startDate),
this.CreateInParam("@EndDate", SqlDbType.DateTime, endDate),
this.CreateInParam("@Source", SqlDbType.SmallInt, eventSourveVal)).ToArray();

我的 RefererStatisticResult 包含两个 List<> 属性,用于结果集,但调用后列表为空。我该如何处理结果集?可以用 SqlQuery 吗?

最佳答案

DbContext 不支持具体化多个结果集。但是,通过下拉到 ObjectContext 并使用 Translate 方法将结果从 DbDataReader 复制到你的领域模型。

这是一些示例代码。这假定您的 ReferrerStatisticResult 只是名为 Set1Set2 的两个列表的容器。显然根据你的实际领域模型进行调整。

// Create container ready for the resultsets
var result = new RefererStatisticResult();

using (var myContext = new MyContext())
{
// Create command from the context in order to execute
// the `GetReferrer` proc
var command = myContext.Database.Connection.CreateCommand();
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "[dbo].[GetReferrer]";
// add in command parameters
// (not shown)

try
{
myContext.Connection.Open();
var reader = command.ExecuteReader();

// Drop down to the wrapped `ObjectContext` to get access to
// the `Translate` method
var objectContext = ((IObjectContextAdapter)myContext).ObjectContext;

// Read Entity1 from the first resultset
result.Set1 = objectContext.Translate<Entity1>(reader, "Set1", MergeOptions.AppendOnly);

// Read Entity2 from the second resultset
reader.NextResult();
result.Set2 = objectContext.Translate<Entity2>(reader, "Set2", MergeOptions.AppendOnly);
}
finally
{
myContext.Database.Connection.Close();
}
}

关于c# - 使用 SqlQuery 处理来自存储过程的多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com