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())
;