2011-01-28 88 views
3

我在我的Linq-To-Sql模型中有一個類,並試圖將存儲過程映射到它。無論我嘗試,我得到的消息:Linq-To-Sql SP不會映射到類

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 
+0

請顯示一些SP代碼/模式/對象嗎?你的linq2sql類和sp表中的表之間是否存在任何不一致? – Jimmy 2011-01-28 17:32:36

回答

1

添加[IsLinked]查詢到的列在您的存儲過程,它應該工作。 (我只是你的表格,等測試,並添加[IsLinked]存儲過程讓我對存儲過程拖放到表中設計師沒有一個錯誤。)

我知道,如果你使用存儲過程要查詢哪些不是 LINQ to SQL實體(但您使用LINQ to SQL自動填充對象),則可以跳過像[IsLinked]那樣的列。但是,如果您要查詢的對象是 LINQ to SQL實體,則必須查詢所有列。我認爲這就是它的工作原理。

0

我也經歷過這個問題。

默認方法返回一個稱爲ISingleResult的泛型。此類型爲System.Data.Linq namespace中定義的 ,使您能夠表示具有單個返回序列的映射函數的結果。

當您構建不返回所有字段的自定義查詢時,這會很有幫助,但表格實體已在我們的設計器中定義,這正是我們想要使用的。

要更改返回表實體的方法,必須從ORM設計器的方法窗格中刪除存儲過程。將存儲過程從「服務器資源管理器」拖到表格上而不是「方法」窗格中。該過程將再次出現在「方法」窗格中,但現在查看生成的代碼是 。選擇方法現在返回ISingleResult 實體,並去除tableselectall類:

您需要檢查,如果表中的字段和字段您選擇在StoredProcedure的是MACHING(不申請缺失) 我已經添加缺少的字段中存儲程序和錯誤解決。