2011-01-28 16 views
3
にマップされません

私のLinq-To-Sqlモデルにクラスがあり、ストアドプロシージャにマップしようとしています。Linq-To-SQL SPはクラス

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

いくつかのSPコード/スキーマ/オブジェクトを表示してください。また、linq2sqlクラスとspのテーブルの間に矛盾がある可能性がありますか? – Jimmy

+0

@Jimmy、テーブル構造 – Macros

+0

で更新されました。チェリーピッキング列の代わりに 'select *'を実行しようとしましたか? – Jimmy

答えて

1

は、ストアドプロシージャで照会列に[IsLinked]を追加し、それが動作するはずです。 (あなたのテーブルなどでテストしたところ、ストアドプロシージャに[IsLinked]を追加すると、エラーなしでストアドプロシージャをデザイナのテーブルにドロップできました)。

ストアドプロシージャを使用している場合 LINQ to SQLエンティティではないクエリオブジェクト(ただし、LINQ to SQLを使用してオブジェクトを自動入力する場合)は、[IsLinked]のように列をスキップできます。しかし、 LINQ to SQLエンティティであるオブジェクトを照会している場合は、すべての列を照会する必要があります。私はそれがうまくいくと思います。

0

この問題も解決しました。

デフォルトのメソッドは、ISingleResultというジェネリック型を返します。このタイプはSystem.Data.Linq namespaceで定義された であり、1つの戻りシーケンスを持つマップされた関数の結果を表すことができます。

これは、すべてのフィールドを返さないカスタムクエリを作成するときに役立ちます。ただし、テーブルエンティティは既にDesignerで定義されており、これが作業したいものです。

テーブルエンティティを返すメソッドを変更するには、ORM Designerのメソッドペインからストアドプロシージャを削除する必要があります。ストアドプロシージャをサーバーエクスプローラからメソッドペインの代わりにテーブルにドラッグします。プロシージャは[メソッド]ペインに再び表示されますが、 が生成されたコードが表示されます。私は保存中に不足しているフィールドを追加しているあなたは、あなたがのStoredProcedureに選択されているテーブルのフィールドとフィールドかどうかを確認する必要があり

は(不足していませ出願)加工へされていない :selectメソッドは今ISingleResult エンティティを返し、tableselectallクラスは削除されましたプロシージャとエラーが解決されました。