更新实体核心中的所有外键导航

时间:2017-12-01 22:05:18

标签: c# entity-framework entity entity-framework-core

我有一个用户类。 UserOne和UserTwo是用户。 我需要将UserTwo的所有外键关系传递给UserOne。

我可以通过以下方式手动执行此操作:

userTwo.PostsCreatedByUser.ToList().ForEach(a => a.CreatedByUserId = userOne.Id);
userTwo.NotesCreatedByUser.ToList().ForEach(a => a.CreatedByUserId = userOne.Id);
context.SaveChanges();

但我想知道是否有办法做到这一点动态? 使用上面的方法,如果我要添加一个带有CreatedByUserId列的新表,我将不得不回到此过程并使用新集合更新它。

以下是示例类的概述:

public partial class User
{
    public User()
    {
        PostsCreatedByUser = new HashSet<Post>();
        NotesCreatedByUser = new HashSet<Note>();
    }

    public virtual ICollection<Posts> PostsCreatedByUser { get; set; }
    public virtual ICollection<Notes> NotesCreatedByUser { get; set; }
}

public partial class Post
{
    public Post() { }

    public int CreatedByUserId { get; set; }

    public virtual User CreatedByUser { get; set; }
}

public partial class Note
{
    public Note() { }

    public int CreatedByUserId { get; set; }

    public virtual User CreatedByUser { get; set; }
}

1 个答案:

答案 0 :(得分:0)

您可以使用反射操作,或者如果它满足您的需求,您可以为此User实体创建扩展方法;

public static class UserEntityExtensions
{
    public static void ConvertRelatedEntities(this User userTwo, User userOne)
    {
        userTwo.PostsCreatedByUser.ToList().ForEach(a => a.CreatedByUserId = userOne.Id);
        userTwo.NotesCreatedByUser.ToList().ForEach(a => a.CreatedByUserId = userOne.Id);
    }
}

<强>用法

userTwo.ConvertRelatedEntities(userOne);

如果您需要添加另一个将要更新的集合,您可以将其添加到扩展方法。您可以更轻松地管理它。