我有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并保存更改。工作正常,更改保存在分贝。但是,如果我想使用User.Materials访问材质,集合不包含任何元素。我已经尝试过简单的项目,它在那里工作。有了我复杂的项目,事实并非如此。该怎么办?
请帮助我,困扰已经8个小时的问题,而且还没有修复它。
编辑:那么,那是......跛脚。
我的代码实际上正在工作,但是...问题是,当查看用户的详细信息时,我从数据库中检索到用户,并使用一个压缩器创建了一个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抱怨(构造函数中的虚拟成员调用)。该怎么办?
你已经删除了太多的代码。没有关于你的问题。 – t3chb0t 2014-12-07 20:56:41
没有其他东西可以显示。当我选择材料,我打电话当前登录的用户的方法,其中规定材料的使用者属性,像这样: '公共无效SetBoxAsUnused(材料材料,用户用户) { material.User =用户 context.SaveChanges( ); }' – Orochi 2014-12-07 21:06:00
“构造函数中的虚拟成员调用”只是一个警告。如果在子类中覆盖了“材质”(例如代理!),则可能会得到[意外结果](http://stackoverflow.com/a/119543/861716)。解决方案是将'otherUser.Materials'赋给'materials'(成员变量,顺便说一句,你可能想根据常见的命名规则命名'_materials')。 – 2014-12-07 21:58:36