我的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
答案 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中选择的表字段和字段是否正在加工(没有缺少字段) 我在存储过程中添加了缺失字段并解决了错误。