私はちょうど Entity Framework を学んでおり、それを私の階層化されたコード構造に組み込むことについて、ある程度の進歩を遂げました。ビジネス レイヤーとデータ アクセス レイヤーの 2 つのビジュアル レイヤーがあります。
私の問題は、レイヤー間でエンティティ オブジェクトを渡すことです。このコード サンプルは機能しません。
// BLL
public static void Test1()
{
List<User> users = (from u in GetActiveUsers()
where u.ID == 1
select u).ToList<User>();
// Do something with users
}
// DAL
public static IQueryable<User> GetActiveUsers()
{
using (var context = new CSEntities())
{
return from u in context.Users
where u.Employee.FirstName == "Tom"
select u;
}
}
エラー メッセージが表示されます。 ObjectContext インスタンスが破棄されたため、接続が必要な操作には使用できなくなりました。
GetActiveUsers メソッドからusingを削除すると、正常に動作します。
GC はいつでもコンテキストを破棄し、BLL を台無しにする可能性があるため、これは危険な行為であることはわかっています。
では、レイヤー間で情報を渡す正しい方法は何ですか? コンテキストも渡す必要がありますか?