首页 > 解决方案 > Entity Framework 6 中一对多依赖的更新问题

问题描述

我在正确使用具有一对多关系的实体框架时遇到了一些问题。

这是模型的一部分:

public class User
{
    [Required]
    public int UserID { get; set; }

    [Required]
    public string Login { get; set; }
    //one to many relationship
    public virtual Group Group { get; set; }
}

public class Group

    [Required]
    public int GroupID { get; set; }

    [Required]
    public string Name { get; set; }

    public virtual Group ParentGroup { get; set; }

    public virtual List<Group> ChildGroups { get; set; }

    [Required]
    public User CreatedBy { get; set; }
}

public class OtherClass

    [Required]
    public int OtherClassID { get; set; }

    [Required]
    public User CreatedBy { get; set; }
}

我对更新 OtherClass 实体有疑问。

当我要更新一个实体时,它没有加载依赖项,我必须使用这样的 Include 添加它们:

using (var db = new DalContext())
{
    var test = db.OtherClasses.Include(o => o.CreatedBy).Single....
}

但是如果我想更新一个 OtherClass 实体,为什么必须加载所有依赖项?

要恢复,当我要更新 OtherClass 实体时,必须完全加载 CreatedBy 依赖项,与组一起,对于组,父组和子组,与用户......

是否可以添加或更新仅填充 ID 属性的实体?

谢谢您的帮助。

标签: c#entity-framework-6

解决方案


我不是专家,但我会尝试以下方法:
我相信您的 Group 和 OtherClass 类中应该有一个 UserId,如下所示:

public class User
{
    [Required]
    public int UserID { get; set; }

    [Required]
    public string Login { get; set; }
    //one to many relationship
    public virtual Group Group { get; set; }
}

public class Group

    [Required]
    public int GroupID { get; set; }

    [Required]
    public string Name { get; set; }

    public virtual Group ParentGroup { get; set; }

    public virtual List<Group> ChildGroups { get; set; }

    [Required]
    public int UserId { get; set; }
    
    //If you want to lazy-load the user when you load the Group entity, use virtual
    //Then you don't need the .Include(g=>g.User)
    public virtual User CreatedBy { get; set; }
}

public class OtherClass

    [Required]
    public int OtherClassID { get; set; }

    [Required]
    public int UserId { get; set; }

    public virtual User CreatedBy { get; set; }
}

要更新 OtherClass,您需要更新/设置 Id 属性,而不是 User 属性。


推荐阅读