2011-08-06 7 views
1

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

は私の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#に変換する方法があれば、それも歓迎します。

答えて

0

あなたはリンクされた質問の答えをお読みくださいでしたか?解決すべきものは何もありません。これは単にデザイナーによってサポートされていません。データベースの最初とモデルの最初のアプローチは排他的です。いずれか1つを2番目に使用することはできますが、それらを組み合わせることはデザイナーを使用するワークフローとは考えられません。

どうすればよいですか?あなたはそのための独自のデータベース生成ワークフローを記述することができます - あなたはここでデフォルトのワークフローを見つける:

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

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

最後に、お金をかけて、標準的なデザイナーがあなたに提供するより多くの魔法をやり遂げることができるツールを購入することができます。あなたはHuagati EDMX toolsとそのmodel comparerの試用を試すことができます。

Btw。なぜ最初にモデルを使用していますか?最初のモデルと最初のコードは、あなたのために生成された厄介なデータベースと、データベース内の最も複雑なロジックが自動生成されたIDであることを気にしないシナリオのためのものです。

私の意見では、最初のモデルやコードは、データ量が少なく、トラフィックが少なく、データベースに全く論理がないため、何も期待していない実際のアプリケーションのためのものではありません。はい、あなたのシナリオはモデルの対象外です。= MSデザイナーが間違ったワークフローを使用しています。

+0

私はデータベースのエキスパートではありません。とにかく、私はデータベースとSQLを扱うことが嫌いです。抽象化の障壁の背後にあり、Entity Frameworkのモデルは、私にとってはちょうど良いものです。 db-firstを実行すると効率が上がるはずですが、実際にSQLを使用するのは嫌いですが、それはパフォーマンスにとって重要なビジネスプロジェクトではありません。私はパワーパックをインストールしましたが、本当に何をすべきかわかりません。モデルからデータベースを生成するには、新しいダイアログが表示されますが、そこに何を設定するか変更するかはわかりません。 –

関連する問題