Linq2Sql Designer将存储过程多个结果集转换为单个

时间:2010-03-01 21:42:56

标签: c# linq linq-to-sql asp.net-3.5

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

每当我在linq2sql设计器中添加一个新过程时,它就会隐藏将上述存储过程从IMultipleResults转换为designer.cs中的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;
}

由linq2sql designer

更改为此
[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));
}

我最终手动撤消。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

使用用户定义的函数,而不是使用存储过程。它们将允许您定义返回类型。然后,LinqToSql可以读取该返回类型并相应地创建类。否则,你的好意思会坚持它产生的东西(据我所知)