【问题标题】:LINQ2SQL - Stored procedure doesn't generate class in designerLINQ2SQL - 存储过程不在设计器中生成类
【发布时间】:2011-06-16 14:55:18
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 能否将您的 sp 代码添加到您的帖子中。谢谢

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


【解决方案1】:

参见 Scott Guthrie 的 this post。

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

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

【讨论】:

  • 我知道我可以创建一个模型并将存储过程分配给该模型,但想知道是否有办法从存储过程中自动生成类/模型,因为它们有大量的字段回来。有什么想法吗?
  • 如您所见,一个类是自动为您创建的。类的名称是附加了“Result”的存储过程的名称。不幸的是,我认为不可能修改它使用的名称:-/
  • 存储过程没有强类型的返回值。我怀疑出于这个原因,设计师没有为你推断出一个模型
  • 我认为因为它与我的数据库有连接,所以它可以看到返回字段和类型(毕竟它会在幕后自动生成一个类,只是给它一个不太清楚的名称,并且不创建设计器表)
【解决方案2】:

我不确定将类添加到表中,但这是“重命名”存储过程的返回类型的一种方法。

以下步骤假定一个名为“GetSomeThings”的存储过程和一个名为“DataContext”的数据上下文。

当您将存储过程添加到设计器时,将其重命名为“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 功能,那么您将需要找到一个额外的解决方法 - 我没有花费太多时间来尝试使其正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多