2011-06-16 65 views
1

我基本上试图通过设计器将一组存储过程添加到我的LINQ2SQL。LINQ2SQL - 存储过程不会在设计器中生成类

它增加了存储过程的方法面板,但不会在发生设计一个类(虽然它在设计代码不会落后。

它给人的返回类型基础上,存储过程的一个奇怪的名字基本上我试图找出将返回类型改为更有意义的最佳方式。

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

我发现了这个问题,但我认为这涉及手写类,然后做一个黑客位的所以不知道这件事:

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

+0

你可以请你的sp代码添加到你的post.thanks – Arian 2011-06-16 20:31:26

回答

3

由Scott Guthrie的见this post

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

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

+0

我知道我可以创建一个模型,并将存储过程分配给该模型,但想知道是否有方法从存储过程自动生成类/模型因为他们有大量的字段返回。有任何想法吗? – Andrew 2011-06-16 15:10:36

+0

正如你注意到的,一个类是*自动为你创建的。类的名称是附加了“Result”的存储过程的名称。不幸的是,我不认为可以修改它使用的名称: -/ – 2011-06-16 15:17:55

+0

存储过程没有强类型返回值。我怀疑是因为这个原因,设计者不会推断你的模型 – 2011-06-16 15:22:03

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"存储过程,你回去会怎样IEnumerable为Thing,而不是GetSomeThingsResult

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