C# Linq2Sql设计器将存储过程多个结果集转换为单个结果集

C# Linq2Sql设计器将存储过程多个结果集转换为单个结果集,c#,linq,linq-to-sql,asp.net-3.5,C#,Linq,Linq To Sql,Asp.net 3.5,在一个linq2sql类中,我调用一个返回多个结果集的存储过程,它可以正常工作 每当我在linq2sql设计器中添加一个新过程时,它就会在designer.cs中将前面提到的存储过程从IMultipleResults转换为ISingleResult 我用以前的版本替换了代码,它可以工作,但是为什么会发生这种情况呢 如何防止设计器更改有效的代码 每次添加新sp时,我都必须撤消设计器所做的操作 这个 [Function(Name="dbo.GetCustomerOrderDetails")] [Re

在一个linq2sql类中,我调用一个返回多个结果集的存储过程,它可以正常工作

每当我在linq2sql设计器中添加一个新过程时,它就会在designer.cs中将前面提到的存储过程从IMultipleResults转换为ISingleResult

我用以前的版本替换了代码,它可以工作,但是为什么会发生这种情况呢

如何防止设计器更改有效的代码

每次添加新sp时,我都必须撤消设计器所做的操作

这个

[Function(Name="dbo.GetCustomerOrderDetails")]
[ResultType(typeof(GetCustomerOrderSummaryResult))]
[ResultType(typeof(GetOrderLineDetailsResult))]

public IMultipleResults GetCustomerOrderDetails([Parameter(DbType="UniqueIdentifier")] System.Nullable<System.Guid> custGuid, [Parameter(DbType="VarChar(75)")] string email, [Parameter(DbType="Int")] System.Nullable<int> orderId)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), custGuid, email, orderId);
       return (IMultipleResults)result.ReturnValue;
}
[函数(Name=“dbo.GetCustomerOrderDetails”)]
[结果类型(类型(GetCustomerOrderSummaryResult))]
[结果类型(类型(GetOrderLineDetailsResult))]
public IMultipleResults GetCustomerOrderDetails([Parameter(DbType=“UniqueIdentifier”)]System.Nullable custGuid、[Parameter(DbType=“VarChar(75)”)]string email、[Parameter(DbType=“Int”)]System.Nullable orderId)
{
IExecuteResult=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())、custGuid、email、orderId);
return(IMultipleResults)result.ReturnValue;
}
由linq2sql设计器更改为此

[Function(Name="dbo.GetOrderLineDetails")]
public ISingleResult<GetOrderLineDetailsResult> GetOrderLineDetails([Parameter(DbType="Int")] System.Nullable<int> orderId)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), orderId);
    return ((ISingleResult<GetOrderLineDetailsResult>)(result.ReturnValue));
}
[函数(Name=“dbo.GetOrderLineDetails”)]
公共ISingleResult GetOrderLineDetails([Parameter(DbType=“Int”)]System.Nullable orderId)
{
IExecuteResult=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod()),orderId);
返回((IsingResult)(result.ReturnValue));
}

我最终手动撤消。

使用用户定义的函数,而不是使用存储过程。它们将允许您定义返回类型。然后,LinqToSql可以读取该返回类型并相应地创建类。否则,您的类将一直使用它生成的内容(据我所知)

或设计器创建的派生DataContext类被声明为分部类。创建另一个扩展该分部类的文件,将或设计器不断更改的特定代码以及GetOrderLineDetailsResult类移动到该文件中。然后从或设计器中卸下sp。或者设计师现在应该让您的代码保持不变。

我一直在考虑这些问题,但希望有一种更简单的方法。谢谢