我有2个实体,用户和材料。用户持有材料的集合。
public class User
{
...
private ICollection<Material> materials;
public virtual ICollection<Material> Materials
{
get { return materials ?? (materials = new List<Material>()); }
set { materials = value; }
}
}
材料:
public class Material
{
...
public int? UserId { get; set; }
public virtual User User { get; set; }
...
}
当记录用户选择材料时,我将该用户分配给Material.User并保存更改。工作正常,更改保存在db中。但是,如果我想使用User.Materials访问材料,则集合不包含任何元素。我尝试过简单的项目,并且在那里工作。对于我的复杂项目,它没有。该怎么办?
请帮助我,已经困扰了8个小时的问题,仍然没有解决它。
编辑:嗯,就是这样......蹩脚。我的代码实际上正在工作但是...问题是,在查看用户详细信息时,我从数据库中检索了用户并使用cunstrictor创建了一个COPY。我错过了一些东西:
public User(User otherUser)
{
Id = otherUser.Id;
FirstName = otherUser.FirstName;
LastName = otherUser.LastName;
Shift = otherUser.Shift;
PassCode = otherUser.PassCode;
Type = otherUser.Type;
Materials = otherUser.Materials; // this line was missing
}
添加此行后,它可以正常工作。只是Visual Studio抱怨(构造函数中的虚拟成员调用)。该怎么办?
答案 0 :(得分:0)
你的问题在这里:
private ICollection<Material> materials;
public virtual ICollection<Material> Materials
{
get { return materials ?? (materials = new List<Material>()); }
set { materials = value; }
}
实体框架导航属性不能是具有支持字段的属性。它只能是autoproperty。所以你应该使用这个代码:
public class User
{
...
public virtual ICollection<Material> Materials
{
get;
set;
}
}