2011-01-21 14 views
1

私が保存された機能を持っている、など:ラッピングLINQツーSQL関数のシグネチャ

CREATE FUNCTION RegionContains 
(
    @RegionX float, @RegionY float, @RegionRadius float, 
    @ObjectX float, @ObjectY float 
) 
RETURNS bit 
AS 
BEGIN 
    DECLARE @IsContained bit 
    DECLARE @ObjectRadius real 
    SELECT @ObjectRadius = SQRT(POWER(@ObjectX - @RegionX, 2) + POWER(@ObjectY - @RegionY, 2)) 

    IF @ObjectRadius <= @RegionRadius 
     RETURN 1 
    RETURN 0 

END 
GO 

それは5つのフロートパラメータを取ります - しかし、事は、私は、これらの値を表して、私のC#プロジェクト内のオブジェクトを持っている、です。

私はビジュアルスタジオを開き、DBMLデザイナに格納された関数をドラッグして、これらのすべてのパラメータを持つ魔法の関数シグネチャを取得します。私はDBMLを更新するときに壊れていないこれのためのラッパーを作成する方法はありますか?私は、これらのオブジェクトから関連する値を抽出し、それらをストアドプロシージャに送信する2つの型付きの引数を取る関数を作成したいと思いますが、linqクエリからそのラッパー関数を呼び出すことはまだ許可されています。 VSはこれをサポートしていますか?

+0

DBMLを更新すると、ラッパーが壊れるのはなぜですか? – Jay

+0

まあ、私は、生成されたコードでうまくいっていると思ったが、コードが再生成されるたびに上書きされるだろうか? –

+0

ラッパーを部分クラスとして追加する必要があります。 dbmlを変更した場合、ラッパーを変更する必要がありますが、ラッパーの呼び出し元は変更されません。 – jlnorsworthy

答えて

1

デザイナーをダブルクリックします。上書きされないC#ソースファイルが作成されます。

生成されるすべてのクラスはpartialとマークされているので、そこにラッパー/ヘルパー関数を追加することができます。これはかなり一般的な方法であり、私はそれをたくさん使う傾向があります。

更新

機能のユースケースに応じて、ラッパーはLinq2SQLクエリでは動作しない場合があります。これがあなたの後であれば、私に知らせてください。私は私の答えを削除します。

+0

ええ、linq2sqlクエリーでラッパーを使用したいと思います。しかし、linq2sqlの呼び出し可能なメソッド_is_は、生成されたソースファイルで作成されたので、作成するには何らかの方法が必要です。 –

+0

@Carson Myers:あなたは試してみることができますが、その機能がクエリにインライン展開されていない可能性があるので、LinqをObjectに頼らざるを得ず、かなりの負担をかけることになります。 – leppie

関連する問題