请教efcore 3.1内嵌对象(值对象)不能更新问题
问题是这样的,比方说我有一个Warehouse类,它有3个属性,3个属性中的Position属性是一个Class。两个class我映射到一张表中。
Warehouse与Position的代码如下
public class Warehouse
{
public long Id { get; set; }
public string Name { get; set; }
public WarehousePosition Position { get; set }
}
public class WarehousePosition
{
public string Code { get; set; }
public string Description { get; set }
}
映射Position代码如下,映射是没有问题的,可以正常生成。
builder.OwnsOne(x => x.Position, y =>
{
y.Property(x => x.Code).IsRequired().HasColumnName("PositionCode").HasMaxLength(32);
y.Property(x => x.Description).HasColumnName("PositionDescription").HasMaxLength(64);
});
可以正常insert
如果修改了Name属性,可以正常更新
如果同时修改了Name属性与Position属性可以正常更新
如果只修改Position属性,就更新不了。跟踪实体的状态是unchange状态,伪代码如下。
var warehouse = await repo.FindAsync(1);
warehouse.Position = new WarehousePosition();
await dbContext.SaveChangesAsync(cancellationToken);
回答
问题补充:
我在github,efcore的issues看了下,有很多人提出这个问题,但官方说3.0已经解决了。然而我用的3.1依旧不行。。头大。。