Как мне обновить один к одному в ядре EF, когда для IDENTITY_INSERT установлено значение OFF - PullRequest
0 голосов
/ 18 февраля 2020

Здравствуйте, у меня есть объект 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, и затем сохраняет Эффективность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...