我在我的域项目中定义了一个(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项目中,我有我的clubcontroller:
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();
}
}
最后,在我的数据库项目中,我创建并检索了俱乐部,
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包含许多联系人。
我不确定我做错了什么:
我认为我错过了一个概念,poco俱乐部类也是我插入数据库的域实体。我究竟做错了什么?哇,我不能懒得加载工作?
答案 0 :(得分:1)
试 ContactPersons.ToList();
这将强制加载所有实体。 见Entity framework, when call ToList() it will load FK objects automatically?
答案 1 :(得分:0)
似乎您的延迟加载在关闭dbContext时执行。所以它不会加载。 您在视图中使用联系人,我是对的吗?
答案 2 :(得分: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
}