次のように組み立てられた単純な3層アプリケーションを実装しようとしています。
1-DAL(これは、UnitOfWorkおよびIRepositoryであり、POCOのエンティティ(エンティティフレームワークT4)を使用します)
2-BLL(DALへの参照)
3-UI(BLLへの参照)
私は多くの記事を読んだので、古典的なUnitOfWork-Repositoryパターンを実装することにしました。これらのリポジトリは、自己追跡エンティティを認識していません。
public interface IRepository<T>
{
void Attach(T entity)
{
...
}
質問:コンポーネントがwinFormコンテキストで実行される場合、一部のUIコントロールが一部のエンティティプロパティを変更する可能性があるため、Edit(Tエンティティ)としてリポジトリのメソッドをさらに呼び出すと、エンティティが内部オブジェクトコンテキストによってすでに追跡されている場合は役に立ちません。明らかに、Webプラットフォームはステートレスであるため、Webコンテキストで実行している場合は、すべて正常に機能します。簡単なトリックは、すべてのBLL操作の後にobjectContextを破棄することですが、この回避策を使用したいかどうかはわかりません。だから私はすべてのケースを管理するためにもっときれいな解決策を探しています。
IRepositoryはSTEについて何かを無視する必要がありますか?ステートレスな環境をシミュレートするために、BLLは常に独自の内部リポジトリやユニットを破棄する必要がありますか?