Linq-To-Sql SP не будет отображаться в классе - PullRequest
3 голосов
/ 28 января 2011

У меня есть класс в моей модели Linq-To-Sql, и я пытаюсь сопоставить ему хранимую процедуру. Что бы я ни пытался, я получаю сообщение:

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

Схема определенно совпадает, я даже прибег к тому, чтобы просто сделать автоматически сгенерированный «выбрать первые 100 строк» ​​в SSMS и поместить его в 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 ]

1 голос
/ 28 января 2011

Добавьте [IsLinked] к запрашиваемым столбцам в вашей хранимой процедуре, и это должно работать.(Я только что проверил вашу таблицу и т. Д., И добавление [IsLinked] к хранимой процедуре позволило мне без ошибок поместить хранимую процедуру в таблицу в конструкторе.)

Я знаю, что если выиспользуя хранимую процедуру для запроса объектов, которые не являются объектами LINQ to SQL (но вы используете LINQ to SQL для автоматического заполнения объектов), вы можете пропустить столбцы, как вы это сделали с [IsLinked].Но если вы запрашиваете объекты, которые являются LINQ to SQL сущностями, вам нужно запросить все столбцы.Я думаю, вот как это работает.

0 голосов
/ 12 февраля 2014

Я также прошел через эту проблему.

Метод по умолчанию возвращает универсальный тип с именем ISingleResult.Этот тип определен в System.Data.Linq namespace и позволяет вам представлять результаты сопоставленной функции, которая имеет одну возвращаемую последовательность.

Это может быть полезно, когда вы создаете пользовательские запросы, которые не возвращают все поля, но сущность таблицы уже определена в нашем конструкторе, и это то, с чем мы хотели бы работать.

Чтобы изменить метод для возврата сущности таблицы, необходимо удалить хранимую процедуру из панели «Методы» ORM Designer .Перетащите хранимую процедуру из обозревателя серверов на таблицу, а не на панель методов.Процедура снова появится на панели методов, но теперь посмотрим на сгенерированный код.Метод select теперь возвращает сущности ISingleResult, и класс tableselectall был удален:

Вам необходимо проверить, являются ли поля таблицы и поля, которые вы выбираете в хранимой процедуре, обработкой (ни одно поле не пропущено) Я добавил отсутствующее поле в сохраненномпроцедура и ошибка устранены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...