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