Linq-To-Sql SP不会映射到类

时间:2011-01-28 17:14:53

标签: c# linq-to-sql

我的Linq-To-Sql模型中有一个类,我正在尝试将存储过程映射到它。无论我尝试什么,我都会收到消息:

one or more selected database objects return a schema that does not match

架构确实匹配,我甚至只是在SSMS中执行自动生成的“选择前100行”并将其放入SP中,没有别的,我仍然收到此消息。

还有什么我应该看的吗?

我的表架构如下:

CREATE TABLE [dbo].[Booking](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ClientID] [int] NULL,
    [BookingTypeID] [int] NULL,
    [LinkedBookingID] [int] NULL,
    [DateCreated] [smalldatetime] NULL,
    [DateUpdated] [smalldatetime] NULL,
    [BookingDateTime] [smalldatetime] NULL,
    [BookingStatusID] [int] NULL,
    [ConfirmationRequired] [bit] NOT NULL,
    [Confirmed] [bit] NOT NULL,
    [InProgress] [bit] NOT NULL,
    [ServiceID] [int] NULL,
    [EmployeeID] [int] NULL,
    [Duration] [int] NULL,
    [ProcessingDuration] [int] NULL,
    [IsPartOfCourse] [bit] NULL,
    [CancellationReason] [int] NULL,
    [Timestamp] [timestamp] NULL,
    [IsLinked] [bit] NULL,
 CONSTRAINT [PK_Booking] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

和SP:

CREATE PROCEDURE booking_test


AS
BEGIN


SELECT TOP 1000 [ID]
      ,[ClientID]
      ,[BookingTypeID]
      ,[LinkedBookingID]
      ,[DateCreated]
      ,[DateUpdated]
      ,[BookingDateTime]
      ,[BookingStatusID]
      ,[ConfirmationRequired]
      ,[Confirmed]
      ,[InProgress]
      ,[ServiceID]
      ,[EmployeeID]
      ,[Duration]
      ,[ProcessingDuration]
      ,[IsPartOfCourse]
      ,[CancellationReason]
      ,[Timestamp]

  FROM [Booking]

END
GO

2 个答案:

答案 0 :(得分:1)

[IsLinked]添加到存储过程中的查询列中,它应该可以正常工作。 (我刚用你的表等进行测试,并且在存储过程中添加[IsLinked],允许我将存储过程放到设计器的表中而不会出错。)

我知道如果您使用存储过程查询不是 LINQ to SQL实体的对象(但您使用LINQ to SQL自动填充对象),则可以像使用[IsLinked]一样跳过列。但是,如果您要查询 LINQ to SQL实体的对象,则必须查询所有列。我认为它是如何运作的。

答案 1 :(得分:0)

我也经历过这个问题。

默认方法返回名为ISingleResult的泛型类型。这种类型是 在System.Data.Linq namespace中定义,使您能够表示具有单个返回序列的映射函数的结果。

当您构建不返回所有字段的自定义查询时,这会很有用,但是我们的Designer中已经定义了表实体,这就是我们想要使用的。

要更改返回表实体的方法,必须从 ORM Designer 的“方法”窗格中删除存储过程。将存储过程从服务器资源管理器拖到表而不是“方法”窗格中。该过程将再次出现在“方法”窗格中,但现在查看代码 产生。 select方法现在返回ISingleResult 实体和tableselectall类已被删除:

您需要检查您在storedprocedure中选择的表字段和字段是否正在加工(没有缺少字段) 我在存储过程中添加了缺失字段并解决了错误。