小编GGG*_*GGG的帖子

首先使用EF代码更新多个到多个集合

我正在使用具有以下配置的EF Code First

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<UserProfile>()
        .HasMany(x => x.TeamLeaders)
        .WithMany()
        .Map(m => m.MapLeftKey("UserId")
        .MapRightKey("TeamLeaderId")
        .ToTable("UserTeamLeaders"));
}
Run Code Online (Sandbox Code Playgroud)

TeamLeaders是一个用户的ICollection,即它是一个自我引用很多关系.

用简单的英语,用户可以拥有多个团队领导.这种配置似乎是正确的,因为它创建了我期望的决斗FK/PK链接表.

我有一个MVC4应用程序,允许编辑,添加和删除集合中的团队领导.

在我的控制器中,我最初有以下内容:

    var original = context.UserProfiles
        .Include("TeamLeaders")
        .Single(x => x.UserId == model.UserId);

    context.Entry(original).CurrentValues.SetValues(model);
Run Code Online (Sandbox Code Playgroud)

但是,最后一行未能将TeamLeaders集合标记为已更新,并且当我调用SaveChanges()时,未记录任何更改.

相反,我在我的User类上编写了一个简单的CopyProperties方法,该方法使用反射手动复制属性,所以在我的控制器中我现在有:

    var original = context.UserProfiles
        .Include("TeamLeaders")
        .Single(x => x.UserId == model.UserId);

    //context.Entry(original).CurrentValues.SetValues(model);

    original.CopyProperties(model);
Run Code Online (Sandbox Code Playgroud)

但是,这太过分了,SaveChanges尝试将新用户添加到与所选团队负责人的配置文件匹配的系统中.

任何人都可以建议我做错了哪一部分?我不确定是否需要更新映射,或者更改将属性从视图模型复制到模型的方式

asp.net-mvc many-to-many entity-framework code-first

5
推荐指数
1
解决办法
2006
查看次数