1

わかりました、この質問を見ましたEntity Framework: Generate Database From Model は Model Store からストアド プロシージャを削除しますしかし、これは解決していないと思います。フィルタリングの選択で SQL Server で実行する必要がある関数がいくつかあります。そのコードを .NET で書くことができなかったので、その関数を SQL Server で関数として書きました。モデルファーストを使用していますが、SQL レベルでその関数が必要であり、データベースからモデルを更新するオプションを使用して関数をインポートします。しかし、Entity Designer で変更を加えてモデルからデータベースを生成すると、関数マッピングが消去されます。model-first と db-first を同時に使用すべきではないことは理解していますが、どうすれば問題を解決できますか? C# では記述できないこのコードがあり、LINQ クエリで必要です。インポートを作成し、データベースの関数にマップする EdmFunction 属性を使用して C# メソッドを作成すると機能します。しかし、モデルと SQL 関数の間のリンクが更新時に保持されるようにするにはどうすれば永続化できますか? LINQ-to-Entities で変換できる関数を作成することが唯一の選択肢ですか?

ここに私のSQL関数があります

    create function [dbo].[HammingDistance]
    (@first bigint, @second bigint) returns int
    as
    begin
        declare @xor bigint = @first ^ @second;
        declare @one bigint = 1;
        declare @diff int = 0;
        declare @and bigint;
        while (@xor != 0)
            begin
            set @and = @xor & @one;
            if(@and = @one)
                begin
                set @diff = @diff + 1;
                end
            set @xor = @xor / 2;
            end
        return @diff;
    end

(私は SQL の専門家ではないため、これが最善の方法ではない可能性があるため、より良い方法があれば修正してください)

DBからASP.NETに何もインポートせずにデータベースで実行するには、これが必要です。このコードを LINQ-to-Entities の SQL コードに変換できる C# に変換する方法があれば、それも歓迎します。

4

1 に答える 1

0

リンクされた質問の答えを読みましたか?解決すべきことは何もありません。設計者によってサポートされていないだけです。データベースファーストとモデルファーストのアプローチは排他的です。どちらか1秒を使用できますが、それらを組み合わせることは、デザイナーを使用するワークフローとは見なされません。

あなたは何ができますか?そのための独自のデータベース生成ワークフローを作成できます。デフォルトのワークフローは次のとおりです。

%VSINSTALLDIR%\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\TablePerTypeStrategy.xaml

最初のアクティビティを独自のアクティビティに置き換える必要があります。これにより、生成後に関数がSSDLにインポートされます。データベース生成のためのより多くの機能を提供するデータベース生成パワーパックを使用することもできます。これらの機能の中には、ワークフローアクティビティの作成よりもハードコーディング関数のインポートがはるかに簡単なSSDL生成用のT4テンプレートがあります。

最後に、あなたはいくらかのお金を使って、あなたが標準的なデザイナーがあなたに提供するよりはるかに多くの魔法をすることを可能にするツールを買うことができます。HuagatiEDMXツールとそのモデル比較ツールを試してみることができます。

ところで。なぜ最初にモデルを使用するのですか?モデルファーストとコードファーストは、生成されたくだらないデータベースを気にせず、データベース内で最も複雑なロジックが自動生成されたIDであるシナリオ用です。

私の意見では、モデルファーストまたはコードファーストは、少量のデータ、少量のトラフィック、データベース内のロジックがまったくない、ダムデータの永続性以上のものを期待する実際のアプリケーションには適していません。はい、シナリオは最初にモデルの範囲外です=MSデザイナーが予期しない間違ったワークフローを使用しています。

于 2011-08-06T14:06:32.260 に答える