私はこれに似たものを試しています:
ただし、私はEDMXを使用していませんが、代わりにDbContextとコードを最初に使用しています。
私はこれに遭遇しました:
https://codefirstfunctions.codeplex.com/
しかし、使い方は適切ではありません。私が達成しようとしているのはこれをできるようにすることです:
var locations = context.Locations.Where(e => Functions.LatLongDistanceCalc(e.Lat, e.Long, lat, long) >= 10)
SQL Serverでスカラー関数(LatLongDistanceCalc)を呼び出す場所。
EDMXを使用せずにこれを行う方法はありますか?手動クエリを作成できることは知っていますが、レイジーロードプロキシなどでエンティティを戻し、より複雑なクエリを構築したいので、これは好ましくありません。
CodeFirstStoreFunctions を使用して、Where
基準でスカラーSQL関数を使用できるはずです
SQL関数[dbo]。[LatLongDistanceCalc]をマップすることを想定し、 テストスイート に従って:
public class MyDataContext: DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//...
modelBuilder.Conventions.Add(new FunctionsConvention("dbo", this.GetType()));
}
// "CodeFirstDatabaseSchema" is a convention mandatory schema name
// "LatLongDistanceCalc" is the name of your function
[DbFunction("CodeFirstDatabaseSchema", "LatLongDistanceCalc")]
public static int LatLongDistanceCalc(int fromLat, int fromLong,
int toLat, int toLong)
{
// no need to provide an implementation
throw new NotSupportedException();
}
}
使用法は次のようになります。
context.Locations
.Where(e => MyDataContext.LatLongDistanceCalc(e.Lat, e.Long, lat, long) >= 10)