我首先要在代码中设计多对多的关系。 EF正在创建Junction表并按照我的预期关联Fk,但是当我尝试访问User的MailingList集合时,没有条目。
我已经通过Seeding在Initialise上实现了测试数据,数据存在于数据库中。
我认为问题在于用户和邮件列表的构造函数,但我不确定。我希望能够导航User.MailingLists的导航属性。
var user = db.Users.Find(1);
Console.WriteLine("{0}", user.EmailAddress); //This is Fine
Console.WriteLine("{0}", user.Address.PostCode); /This is Fine
foreach (MailingList ml in user.MailingLists) // this is 0
{
Console.WriteLine("{0}", ml.Name);
}
我的模型如下: -
public class User : IEntityBase
{
public User()
{
MailingLists = new List<MailingList>();
}
public int Id { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public string EmailAddress { get; set; }
public DateTime? DateLastUpdated { get; set; }
public DateTime DateCreated { get; set; }
public bool IsDeleted { get; set; }
public virtual Address Address { get; set; }
public ICollection<MailingList> MailingLists { get; set; }
}
public class MailingList : IEntityBase
{
public MailingList()
{
Users = new List<User>();
}
public int Id { get; set; }
public string Name { get; set; }
public DateTime? DateLastUpdated { get; set; }
public DateTime DateCreated { get; set; }
public bool IsDeleted { get; set; }
public ICollection<User> Users { get; set; }
}
public class Address : IEntityBase
{
public int Id { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string AddressLine3 { get; set; }
public string City { get; set; }
public string County { get; set; }
public string PostCode { get; set; }
public DateTime? DateLastUpdated { get; set; }
public DateTime DateCreated { get; set; }
public bool IsDeleted { get; set; }
}
欢迎任何建议。
答案 0 :(得分:1)
您既不急于在查询中加载MailingList
条目,也不会满足延迟加载代理的要求,因此EF无法填充集合。
要允许延迟加载,请将MailingList
属性更改为虚拟,以允许EF代理覆盖它。
要使用预先加载,请在查询中使用Include()
(System.Data.Entity
中的扩展方法)来指定应加载MailingList
。