更新导航属性有效但实体未出现在Collection中

时间:2014-12-07 20:46:55

标签: c# entity-framework

我有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抱怨(构造函数中的虚拟成员调用)。该怎么办?

1 个答案:

答案 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;
        }
}