C# 实体框架和多对多映射:更新问题

C# 实体框架和多对多映射:更新问题,c#,entity-framework,C#,Entity Framework,我在模型中映射了多对多关系。材质实体与许多颜色实体相关,反之亦然。我正在为这个MaterialColor使用和中间tabled,它只有两个id列引用每个表中的每个id 以下是在my DbContext实现中的配置方式: modelBuilder.Entity<Material>().HasMany<Color>(p => p.Colors).WithMany() .Map(m => {

我在模型中映射了多对多关系。材质实体与许多颜色实体相关,反之亦然。我正在为这个MaterialColor使用和中间tabled,它只有两个id列引用每个表中的每个id

以下是在my DbContext实现中的配置方式:

       modelBuilder.Entity<Material>().HasMany<Color>(p => p.Colors).WithMany()
           .Map(m =>
           {
               m.ToTable("MaterialColor");
               m.MapLeftKey("MaterialId");
               m.MapRightKey("ColorId");
           });
该问题尚未完全解决,因为它仍在尝试插入MaterialColor。我不知道如何告诉英孚也跳过这种关系

我试过这个:

        _dbContext.Entry(material).Property(m => m.Colors).IsModified = false;
但我得到了一个错误:

其他信息:“材质”类型上的属性“颜色”为 不是原始或复杂的属性。属性方法只能是 与基本属性或复杂属性一起使用。使用引用或 收集方法

这是有道理的,因为颜色是一个集合

我如何告诉EF忽略这种关系

注意:不可选择加载不带颜色的材料

编辑:添加打印机和打印机。物料初始化:

        var printer = new Printer();
        printer.Materials = new List<Material>();
        printer.Materials.Add(_materialService.GetMaterialById(materialId)); // this gives the material with many properties populated, like Colors.

由于找不到解决方法,我必须删除此映射:

       modelBuilder.Entity<Material>().HasMany<Color>(p => p.Colors).WithMany()
       .Map(m =>
       {
           m.ToTable("MaterialColor");
           m.MapLeftKey("MaterialId");
           m.MapRightKey("ColorId");
       });

这样,我可以在需要时将物料实体的物料颜色集合元素设置为未更改。

是否可以添加打印机和打印机。物料初始化,以及?@TaherRahgooy已添加。保存此内容时,EF添加新颜色?@TaherRahgooy不再:它尝试在MaterialColor see关系图上方插入材质颜色不应受到影响,因为提供的代码不会更改它。
        var printer = new Printer();
        printer.Materials = new List<Material>();
        printer.Materials.Add(_materialService.GetMaterialById(materialId)); // this gives the material with many properties populated, like Colors.
       modelBuilder.Entity<Material>().HasMany<Color>(p => p.Colors).WithMany()
       .Map(m =>
       {
           m.ToTable("MaterialColor");
           m.MapLeftKey("MaterialId");
           m.MapRightKey("ColorId");
       });
public class MaterialColor : ICacheableEntity
{
    public virtual Material Material { get; set; }
    public virtual Color Color { get; set; }
    public int ColorId { get; set; }
    public int MaterialId { get; set; }
}