EF Core 2.1 [отслеживание изменений] - сохранение всех связанных объектов - PullRequest
2 голосов
/ 15 марта 2019

Возможно, название неправильно понято, но я попытаюсь объяснить мою ситуацию здесь.

Итак, учитывая мою сущность Person, которая имеет виртуальное свойство Country, следующим образом:

public class Person {
    public long Id { get; set;}
    public short IdCountry { get; set;}
    public virtual Country Country { get; set; }
    ...
}

и отображение следующим образом:

...
builder.HasOne(c => c.Country)
    .WithMany()
    .HasForeignKey(c => c.IdCountry);

и мой репозиторий является общим.

Что происходит здесь, когда я пытаюсь сохранить некоторые изменения в Person,Country Состояние сущности пришло ко мне как Added, что не имеет смысла.

Я привожу здесь похожий пример того, что со мной происходит.На самом деле, у меня есть, как и пять других виртуальных свойств в моем классе Person, и некоторые из них находятся в этом состоянии (Added).

Кто-нибудь когда-нибудь имел дело с этим раньше?Заранее спасибо.


РЕДАКТИРОВАТЬ: Ansewing @alans ответ: я делаю что-то похожее, как показано:

foreach (var entrie in entry.Context.ChangeTracker.Entries())
{
    try
    {
        key = entrie.Entity.GetType().GetProperty("Id").GetValue(entrie.Entity, null);
    }
    catch (Exception ex)
    {
        key = null;
    }
    if (key != null && entrie.State == EntityState.Added)
    {
        entrie.State = EntityState.Unchanged;
    }
    else if (Convert.ChangeType(key, typeof(long)) as long? == 0)
    {
        entrie.State = EntityState.Added;
    }
}
_dbContext.SaveChanges();

@ TanvirArjel этот метод выше, где состояние приходит как Added

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Я использовал AsNoTracking() метод расширения для вопросов производительности в EF6, но я понял, что в EFCore этот конкретный метод немного отличается (я переносил код).Итак, я только удалил метод

0 голосов
/ 15 марта 2019

Вы где-нибудь обновляете объект Country?Если ключ свойства имеет значение по умолчанию, он будет помечен как добавленный.Это мое предположение.

...