Свойство myFk типа сущности Order имеет временное значение. - PullRequest
0 голосов
/ 04 ноября 2019

У меня отношение «один ко многим» с заказом и некоторыми линиями заказа.

При обновлении среды выполнения с 2.0. в NetCore 2.2.7 я начал получать это сообщение:

System.InvalidOperationException: свойство OrderId для типа сущности OrderLineDto имеет временное значение. Либо задайте постоянное значение явно, либо убедитесь, что база данных настроена для генерации значений для этого свойства.

Что-нибудь изменилось при обновлении, и что именно является этой ошибкой? В OrderlineDto у меня есть OrderId, но я никогда ничего не делал для его обслуживания, и я не предполагал, что должен.

Упрощенный код выглядит следующим образом:

Order o = new OrderDto() {Foo = "Foo"};
o.Lines.Add(new OrderlineDto(whatever) {Bar = "Bar"});
_db.Orders.Add(o);
_db.SaveChanges();

OrderlineDto isСначала база данных и выглядит следующим образом:

[Key]
[Column("Id_pk")]
public int Pk { get; set; }
public int OrderId { get; set; }
public virtual OrderDto Order { get; set; }

Это также, кажется, все еще работает на некоторых компьютерах, но не на других. Так что это может быть плохая установка или что-то в этом роде, но если можно было бы выполнить кодовую замену, которая решает это явным образом, то меня это тоже интересует.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

похоже, что структура сущностей не распознает отношение один-ко-многим, вы можете попытаться добавить этот код в OnModelCreating ()

 modelBuilder.Entity<OrderlineDto>()
      .HasOne(ol => ol.OrderDto)
      .WithMany()
      .HasForeignKey(p => p.OrderId);

, затем добавить миграцию и проверить, есть лиобновления в базе данных

0 голосов
/ 06 ноября 2019

По какой-то причине проблема заключалась в неправильном ChangeTracker. Мое решение состояло в том, чтобы вручную отключить все при каждом сохранении. Я оставлю решение здесь, если другие будут искать что-то подобное.

var changedEntriesCopy = _db.ChangeTracker.Entries().ToList();
await _db.SaveChangesAsync();
foreach (var entry in changedEntriesCopy)
    entry.State = EntityState.Detached;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...