わかりました、この質問を見ました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# に変換する方法があれば、それも歓迎します。