Изменения в столбце IDENTITY после EF core 3 - PullRequest
1 голос
/ 28 сентября 2019

До версии ядра EF, используемой в .donet core 2.2, после команды .Add EF заполняет ключевой столбец большим отрицательным числом.

После обновления 3.0 этого больше не происходит.

Вот код:

var appointment = new Appointment
{
    Date = DateTime.Today,
    ProfessionalId = schedule.ProfessionalId
};
await service.AddAsync(appointment);

string message = null;
if (service.AddLastPrescription(appointment.Id, schedule.PacienteId))
 ....

Проблема состоит в том, что теперь "встречи.Ид" равен нулю, и вызов сервисной функции не удастся (ошибка FK).

Такое поведение ожидалось в 3.0?

update

Функция AddAsync

private DbSet<T> dbSet;

public async Task AddAsync(T t)
{
    await dbSet.AddAsync(t);
}

, где T - это ModelBase:

public class ModelBase
{

    [Key]
    public int Id { get; set; }

    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }

}

1 Ответ

1 голос
/ 28 сентября 2019

Такое поведение ожидалось в 3.0?

Да, это одно из 3.0 критических изменений - Временные значения ключей больше не устанавливаются наэкземпляры сущностей .

Предлагаемые решения:

  • Не использовать сгенерированные хранилищем ключи.
  • Вместо этого задайте свойства навигации для формирования отношенийустановки значений внешнего ключа.
  • Получение фактических значений временного ключа из информации отслеживания объекта.Например, context.Entry(blog).Property(e => e.Id).CurrentValu e вернет временное значение, даже если само blog.Id не было установлено.

Опция # 1 не имеет смысла (очевидно, затронутые места ужеиспользовать магазин сгенерированных ключей).

Вариант № 2 предпочтителен, если у вас есть свойства навигации.

Вариант № 3 ближе к предыдущему поведению, но требует доступа к контексту БД.

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