5

ドメイン プロジェクトで (poco?) クラスを定義しました。

public class Club
{
   public Club()
   {
      ContactPersons = new HashSet<ContactPerson>();
   }

   public int Id { get; set; }

   [Required]
   [StringLength(64)]
   public string Name { get; set; }

   public virtual ICollection<ContactPerson> ContactPersons { get; set; }
}

public class ContactPerson
{
     public virtual int Id { get; set; }

     [StringLength(64)]
     public virtual string FirstName { get; set; }

     [StringLength(64)]
     public virtual string LastName { get; set; }
 }

私の MVC プロジェクトには、クラブコントローラーがあります。

   public ActionResult Create(CreateClubViewModel model)
   {
      Club club = new Club();
      model.Initialize(club);
      IClubDb clubDb = DependencyResolverHelper.IClubDbService;
      clubDb.Create(club);  // create club in db
   }

    public ActionResult Display(string domain)
    {
        try
        {
            IClubDb clubDb = DependencyResolverHelper.IClubDbService;
            Club club = clubDb.Get(domain);
            return View(club);
        }
        catch (Exception)  // user is not logged iin
        {
            return View();
        }
    }

最後に、DB プロジェクトでクラブを作成して取得し、

public Club Get(string name)
{
   return DataContext.Clubs
   //.Include(x => x.ContactPersons)
   .Single(r => r.Name == name);
}

 public int Create(Club club)
 {
         DataContext.Clubs.Add(club);
         return DataContext.SaveChanges();
 }

Display メソッドで Get クラブを呼び出すと、EF がクラブ オブジェクトの ContactPersons を遅延ロードするようにあらゆることを試みましたが、ContactPersons の長さは常にゼロです。ただし、.include を使用して連絡担当者を熱心に読み込むと (この部分はコメントアウトしました)、明らかに ContactPersons には多数の連絡先が含まれます。

何が間違っているのかわかりません:

  1. poco クラスを定義するためのガイドラインに従っています: http://msdn.microsoft.com/en-us/library/dd468057.aspx
  2. パブリック パラメーターのないコンストラクターがあります (ただし、保護されたコンストラクターはありません)。
  3. 遅延読み込みを有効にしています

私は概念が欠けていると思います.pocoクラブクラスは、DBに挿入するドメインエンティティでもあります. 私は何を間違っていますか?遅延読み込みが機能しないのはなぜですか?

4

3 に答える 3

1

ContactPersons.ToList(); を試してください。

これにより、すべてのエンティティが強制的に読み込まれます。エンティティ フレームワークを参照してください。ToList() を呼び出すと、FK オブジェクトが自動的に読み込まれますか?

于 2013-08-20T19:22:03.317 に答える
0

エンティティに外部キーを含めるのを忘れていませんか?

public class ContactPerson
{
    public virtual int Id { get; set; }

    [StringLength(64)]
    public virtual string FirstName { get; set; }

    [StringLength(64)]
    public virtual string LastName { get; set; }

    public int ClubId { get; set; }
    [ForeignKey("ClubId")]
    public virtual Club Club { get; set; } // if you need
}
于 2013-02-20T19:02:29.003 に答える
0

dbContext が閉じているときに LazyLoading が実行されるようです。したがって、ロードされません。ビューで ContactPerson を使用していますね。

于 2013-01-01T21:59:51.040 に答える