2

たとえば、私が持っているとします(疑似コード):

public IEnumerable<User> GetUsers(string name)データ アクセス レイヤーで Entity Framework に接続します。現時点では、.ToList()返す前に実行するため、ビジネス ロジック レイヤーがデータ アクセス レイヤーに干渉しないようにします。

ただし、ビジネスロジックレイヤーでは、これに少し異なるバリエーションが必要です。たとえば、必要なデータが少なくなります(たとえば、ユーザーIDまたはさらにフィルタリングするためなど)。

効率的な DB レイヤーを作成するには、データのサブセットを返す別のメソッド (オーバーロードされたメソッドなど) が必要です。

ただし、ToList() を「チート」して省略することもできます。ビジネス ロジック レイヤーは最後に AsQueryable() を追加します。したがって、私のビジネス ロジック レイヤーは、作成された基になる SQL を操作できます。

ビジネス ロジック層の AsQueryable() に対する人々の考えは? これは私のデータ アクセス レイヤーに対する漏れやすい抽象化のように思えますが、信じられないほど便利である可能性があります。おそらく、(EF 名前空間ではなく) LINQ 名前空間にあるため、使用するのはそれほど悪いことではありませんか?


編集

注意すべき有用な点 (および ToList() の省略に対する議論) は、それを呼び出すコードが以前にデータバインディングのために ToList() に依存していた場合、つまりエラー「ストアクエリに直接データバインディング (DbSet、DbQuery、 DbSqlQuery) はサポートされていません。」実行時エラーだけで、コンパイル時エラーは発生しません。したがって、ToList() が確実に UI 層の前に呼び出されるようにする必要があります。

4

1 に答える 1

1

個人的には、データアクセス層でToList()を実行する2番目のメソッドを追加し、それを呼び出します。そのようにすっきりしています:

functionA()
{
    return myDB.entityA.AsQueryable();
}

functionB()
{
    return functionA().ToList();
}

おそらく、将来、どこか別の場所から同じ関数を呼び出す必要があるでしょう。一箇所に保管してください。

于 2013-02-27T10:33:20.013 に答える