EFCore 3 - Сохранение элемента throw sql исключение «не может обновить столбец идентификаторов» - PullRequest
0 голосов
/ 28 января 2020

Я работаю над Entity Framework Core 3.0 в. net Core 3.0, но когда я пытаюсь обновить этот элемент (только этот класс, в первой модели БД), он выдает мне эту ошибку

Sql Исключение. не могу обновить столбец идентификаторов 'IDNRR'

Я просто получаю элемент из таблицы X и затем сохраняю его с помощью context.Update

Юнит-тест с исключением

var c = _dbContext.TblWoTaskExtServices.SingleOrDefault(x => x.Idnrr == 15273778);
_dbContext.Update(c);
_dbContext.SaveChanges(); -> execute this give me the sql exception

Unit test with exception

определение класса

modelBuilder.Entity<TblWoTaskExtServices>(entity =>
{
    entity.HasKey(e => new { e.ExternalServiceCode, e.IdWotask });

    entity.ToTable("tbl_WO_TASK_EXT_SERVICES");

    entity.HasIndex(e => e.Idnrr)
        .HasName("IX_tbl_WO_TASK_EXT_SERVICES")
        .IsUnique();

    entity.Property(e => e.ExternalServiceCode)
        .HasMaxLength(255)
        .IsUnicode(false);

    entity.Property(e => e.IdWotask).HasColumnName("IdWOTask");

    entity.Property(e => e.DateIns).HasColumnType("smalldatetime");

    entity.Property(e => e.DateMod).HasColumnType("smalldatetime");

    entity.Property(e => e.ExternalServiceDescription).HasColumnType("text");

    entity.Property(e => e.Idnrr)
        .HasColumnName("IDNRR")
        .ValueGeneratedOnAdd();

    entity.Property(e => e.Notes).HasColumnType("text");

    entity.Property(e => e.TotalCost).HasColumnType("decimal(18, 2)");

    entity.Property(e => e.TotalCostFinal).HasColumnType("decimal(18, 2)");

    entity.HasOne(d => d.IdCompanyNavigation)
        .WithMany(p => p.TblWoTaskExtServices)
        .HasPrincipalKey(p => p.Idnrr)
        .HasForeignKey(d => d.IdCompany)
        .OnDelete(DeleteBehavior.ClientSetNull)
        .HasConstraintName("FK_tbl_WO_TASK_EXT_SERVICES_tbl_COMPANIES");

    entity.HasOne(d => d.IdCostClassNavigation)
        .WithMany(p => p.TblWoTaskExtServices)
        .HasPrincipalKey(p => p.Idnrr)
        .HasForeignKey(d => d.IdCostClass)
        .HasConstraintName("FK_tbl_WO_TASK_EXT_SERVICES_tbl_COST_CLASSES");

    entity.HasOne(d => d.IdCurrencyNavigation)
        .WithMany(p => p.TblWoTaskExtServices)
        .HasPrincipalKey(p => p.Idnrr)
        .HasForeignKey(d => d.IdCurrency)
        .HasConstraintName("FK_tbl_WO_TASK_EXT_SERVICES_tbl_Currencies");
    });
}

1 Ответ

0 голосов
/ 29 января 2020

Решено без использования метода Update ()

, как подсказывает @metacube

Кроме того, вы не изменили возвращенную сущность, но использовали для нее DbContext.Update, которая изменила сущность состояние «Модифицировано». Я предлагаю просто изменить необходимые свойства отслеживаемой сущности, а затем вызвать SaveChanges

...