EF Core中具有值对象的一对多更新

时间:2020-08-02 09:32:41

标签: c# asp.net-core one-to-many ef-core-3.1

您可以看到我有3个班级:

public class car
{
        public int Id { set; get; }
        public string Name { set; get; }
        public List<CarTest> CarTest { get; set; }

        public car(string name, int id, List<CarTest> carTests)
        {
            Id = id;
            Name = name;
           
            CarTest = carTests;
        }

        public car()
        {
        }
}

public class CarTest
{
      public OVTest OV { get; set; }
      public string CarOV { get; set; }
}

public class OVTest
{
      public string Name { get; set; }
}

如您所见,我想编辑我的值:

static void Main(string[] args)
{
    myctx myc = new myctx();
    
    var cartests = new List<CarTest>();
    var cartest = new CarTest();

    var OV = new OVTest();
    OV.Name = "editedName";
    cartest.OV = OV;
    cartest.CarOV = "2OV";
    cartests.Add(cartest);
    var editcar = new car("ee5155fe",2, cartests);
    myc.ChangeTracker.TrackGraph(editcar, e =>e.Entry.State = EntityState.Modified);

    myc.SaveChanges();

    Console.ReadLine();
}

但是我得到这个错误:

System.InvalidOperationException:实体类型'OVTest'上的'CarTestId'属性是键的一部分,因此无法进行修改或将其标记为已修改。要使用标识的外键更改现有实体的委托人,请先删除依赖项,然后调用“ SaveChanges”,然后将依赖项与新委托人相关联。”

这是我的配置:

public class CarConfig : IEntityTypeConfiguration<car>
{
        public void Configure(EntityTypeBuilder<car> builder)
        {     
            builder.OwnsMany(u => u.CarTest);
            builder.OwnsMany(u => u.CarTest).OwnsOne(c=>c.OV);
        }
}

0 个答案:

没有答案
相关问题