0

「レイヤード」アプリケーションがあります:

  • プレゼンテーションMVC
  • サービス層
  • ビジネスロジック層 (BLL)
  • データレイヤー

すべてのレイヤーにEntityFrameworkモデルファーストアプローチのエンティティを使用しています。また、遅延読み込みを使用しています。

たとえば、Employee エンティティがあります。

[Serializable]
[DataContract]
public class Employee 
{
    [DataMember]
    public string name { get; set; }
    [DataMember]
    public List<Image> images { get; set; }
}

DataLayer には、たとえば、次のような操作を持つ EmployeeDAO があります。

public List<Employee >GetAll()
{
    List<Employee> resultList;

    using (ModelContainer ctx = new ModelContainer()) // DbContext
    {
        resultList = ctx.Employees.All<Employee>().ToList<Employee>();
    }

    return resultList;
}

問題は、Employee 内の List of Images で「Object Disposed」という例外が発生し、その理由がわかりません。

ありがとう!!!

4

1 に答える 1

1

ほとんどの場合、遅延読み込みが原因です。メソッドGetAllはコンテキストを作成し、従業員をロードした後にコンテキストを破棄しますが、遅延ロードではコンテキストを維持する必要があります。アプリケーションを再設計し、サービス層でコンテキストの有効期間を制御するか、遅延読み込みを使用しないようにする必要があります。

ところで。サービス レイヤーがリモート レイヤー (WCF またはその他のテクノロジ) を表す場合は、遅延読み込みをまったく使用しないでください。

于 2012-05-10T08:04:01.420 に答える