LINQ2SQL - 存储过程不会在设计器中生成类

时间:2011-06-16 14:55:19

标签: linq-to-sql stored-procedures return-type

我基本上是尝试通过设计器向LINQ2SQL添加一组存储过程。

它将存储过程添加到方法面板但不在设计器上生成类(尽管它在后面的设计器代码中。)

它根据存储过程为返回类型提供了一个奇怪的名称,基本上我正在尝试找出将返回类型更改为更有意义的更好方法。

我知道我可以在设计器上手动创建类,但我有5个非常大的类,并且想知道有没有一种方法可以自动创建这些类或者只是正确地重命名返回类型?

我发现了这个问题,但我认为这涉及到手工编写你的课程,然后做一些黑客攻击,所以不确定:

LINQ to SQL -- Can't modify return type of stored procedure

2 个答案:

答案 0 :(得分:3)

请参阅Scott Guthrie撰写的this post

如果向下滚动到“将SPROC方法的返回类型映射到数据模型类”部分,您可以看到如果将存储过程拖到LINQ2SQL设计器中的特定模型类上,它将告诉设计者您希望存储过程返回该模型类型的集合。

您还可以查看人们处理从存储过程返回多种类型数据的方式,以此作为处理问题的方法。

答案 1 :(得分:0)

我不确定是否将该类添加到表中,但这里有一种“重命名”sproc返回类型的方法。

以下步骤假设一个名为“GetSomeThings”的存储过程和一个名为“DataContext”的dataContext。

将sproc添加到设计器时,将其重命名为“GetSomeThingsPrivate”。在designer.cs文件中,现在将定义一个名为“GetSomeThingsPrivateResult”的类。

创建一个名为“Thing”的新类。按如下方式定义新的分部类:public partial class GetSomeThingsPrivateResult : Thing {}

定义一个新的分部类,如下所示:

public partial class DataContext
{
    public IEnumerable<Thing> GetSomeThings()
    {
        return GetSomeThingsPrivate.Cast<Thing>();
    }
}

现在您可以调用GetSomeThings()方法,该方法将调用"GetSomeThings"存储过程,您获得的内容将是Thing的IEnumerable,而不是GetSomeThingsResult

请注意,设计器生成的方法返回ISingleResult,而新方法返回IEnumerable。如果您需要ISingleResult功能,那么您将需要找到一个额外的解决方法 - 我没有花太多时间来努力实现这一点。