Здравствуйте, у меня есть объект Xs, который имеет отношение 1 к 1 к XEffectiveness
[Table("Xs")]
public class X : FullAuditedEntity
{
public virtual int? Effectiveness { get; set; }
[ForeignKey("Effectiveness")]
public XEffectiveness EffectiveneFk { get; set; }
}
[Table("XEffectivenesses")]
public class XEffectiveness : FullAuditedEntity
{
public virtual int XId { get; set; }
public virtual X X { get; set; }
}
Когда я создаю новую запись, она успешно заполняет обе таблицы правильно. Однако, когда я go обновляю записи, не удается с Microsoft.EntityFrameworkCore.DbUpdateException: при обновлении записей произошла ошибка. Смотрите внутреннее исключение для деталей. ---> System.Data.SqlClient.SqlException: Невозможно вставить явное значение для столбца идентификаторов в таблице 'XEffectiveities', если для IDENTITY_INSERT задано значение OFF.
Мой PortalDBContext.cs имеет следующее:
modelBuilder.Entity<X>()
.HasOne(x=> x.EffectiveneFk)
.WithOne(u => u.X)
.HasForeignKey<XEffectiveness>(b => b.XId);
Чтобы обойти проблему, я принял следующее:
private async Task<int> Update(CreateOrEditXDto input)
{
var x = await _xRepository.FirstOrDefaultAsync((int)input.Id);
ObjectMapper.Map(input, x);
var TEMPeffectiveness = x.EffectiveneFk;
x.EffectiveneFk = null;
await _xRepository.UpdateAsync(x);
await _lookup_xEffectivenessRepository.InsertOrUpdateAsync(TEMPeffectiveness);
return x.Id;
}
, который по существу временно снимает 1 к 1 Эффективности, сохраняет родителя 1 к 1, который является X, и затем сохраняет Эффективность