1

基本的に、私はこのような方法を実装しようとしています。

IQueryAble GetQuery<T>(Entities db) または拡張方法Entities.GetQuery<T>()

このようにして、このようなことができます

public IQueryable<T> GetAll()
{
return yourEntityClasses.GetQuery<T>();
}

これは SELECT * FROM クエリ式を返し、明らかにそこから、並べ替え、ページ付け、where 式などのための追加の一般的なメソッドを作成できるため、テーブルごとにこれらのメソッドのコードを繰り返す必要がなくなります。SubSonic3 がこれについて非常にうまく機能していることは知っていますが、私が取り組んでいる EntityFramework プロジェクトの機能の一部を複製しようとしていました。私がEFで目にするのはCreateQueryとObjectQueryだけですが、どちらもテーブル名を知る必要があるクエリ文字列を渡す必要があります。

4

1 に答える 1

2

さて、CreateQueryメソッドに入れる必要のある文字列を自動的に取得することは可能です。

基本的にそれはただstring.Format("[{0}]",entitySetName)です;

MESTと呼ばれるものを使用していないと仮定すると、エンティティセット名を取得するにはどうすればよいですか。ほとんどの人は使用していません。このヒントで記述した関数を使用して、TのEntitySetとその名前を取得できます。

これを行うと、拡張メソッドを作成するのは非常に簡単なはずです。

すなわち

public static IQueryable<T> GetAll<T>(this ObjectContext context)
{
    var wkspace = context.MetadataWorkspace;
    EntitySet set = wkspace
       .GetEntitySets(wkspace.GetCSpaceEntityType<T>())
       .Single(); 
    return context.CreateQuery<T>(string.Format("[{0}]",set.Name);
}

使用される他の機能については、上記のヒントを参照してください。

お役に立てれば

アレックス

于 2009-06-20T16:09:30.220 に答える