C# EF Core 3.x:复制记录无法按预期工作

C# EF Core 3.x:复制记录无法按预期工作,c#,entity-framework-core,ef-core-3.1,savechanges,C#,Entity Framework Core,Ef Core 3.1,Savechanges,我有以下型号: public partial class Device { public string Id { get; set; } public string IMEI { get; set; } public virtual DeviceVerizon VerizonData { get; set; } } public class DeviceVerizon { public int DeviceId { get; set; } public

我有以下型号:

public partial class Device 
{
    public string Id { get; set; }
    public string IMEI { get; set; }
    public virtual DeviceVerizon VerizonData { get; set; }
}

public class DeviceVerizon
{
    public int DeviceId { get; set; }
    public virtual Device Device { get; set; }
    public string ServicePlan { get; set; }
    public string State { get; set; }
}

public class DeviceVerizonMap : IEntityTypeConfiguration<DeviceVerizon>
{
    public void Configure(EntityTypeBuilder<DeviceVerizon> builder)
    {
        builder.ToTable(nameof(DeviceVerizon));
        builder.HasKey(d => d.DeviceId);

        builder.HasOne(o => o.Device)
            .WithOne(o => o.VerizonData)
            .HasForeignKey<DeviceVerizon>(a => a.DeviceId)
            .OnDelete(DeleteBehavior.Cascade)
            .IsRequired()
            ;
    }
}

public partial class DeviceMap : IEntityTypeConfiguration<Device>
{
    public override void Configure(EntityTypeBuilder<Device> builder)
    {
        builder.ToTable(nameof(Device));
        builder.HasKey(d => d.Id);
        builder.HasIndex(d => d.IMEI).IsUnique();
    }
}
然后:

            var newVerizonData = _mapper.Map<DeviceVerizon, DeviceVerizon>(verizonData);
            newVerizonData.DeviceId = targetDeviceId;
var newVerizonData=\u mapper.Map(verizonData);
newVerizonData.DeviceId=targetDeviceId;
(另外,我尝试了
targetDevice.VerizonData=newVerizonData;
而不是
newVerizonData.DeviceId=targetDeviceId;
),在调试器中,我看到
targetDevice.VerizonData
有预期的数据,而该对象有预期的DeviceId(
targetDeviceId
),但在
等待_context.saveChangesSync()之后我在DB中根本没有这个verizon数据


出什么问题了?

问题是因为Automapper映射的也是
设备
实体,不管您是否设置了设备ID。。。此解决方案的工作原理是:

        CreateMap<DeviceVerizon, DeviceVerizon>()
            .ForMember(d => d.DeviceId, o => o.Ignore())
            .ForMember(d => d.Device, o => o.Ignore())
            ;
CreateMap()
.ForMember(d=>d.DeviceId,o=>o.Ignore())
.ForMember(d=>d.Device,o=>o.Ignore())
;

您是否尝试过在没有映射器的情况下创建新实例,并使用context.xxx.add(instance)@AliK added
\u context.deviceverizon.add(newVerizonData)将其传递给上下文,相同的行为:(
        CreateMap<DeviceVerizon, DeviceVerizon>()
            .ForMember(d => d.DeviceId, o => o.Ignore())
            .ForMember(d => d.Device, o => o.Ignore())
            ;