Я пытаюсь обновить запись Entity EF Core следующим образом:
public class Customer
{
public int Id { get; set; }
public int Name { get; set; }
...
public int CountryId { get; set; }
public virtual Country Country { get; set; }
public int ZoneId { get; set; }
public virtual Zone Zone { get; set; }
public ICollection<Service> Services { get; set; }
public virtual ICollection<Invoice> Invoices { get; set; }
}
Когда я вызываю Context.Update () или Context.Add (), также обновляются объекты Zone и Country. Я не хочу, чтобы обновление виртуальных свойств. Я пытаюсь, с отражением, получить виртуальные свойства для указания, что Entry (virtualProperty) .State = EntityState.Detached, но я не могу. Это код, который я пытаюсь.
Type typeOfTEntity = typeof(TEntity);
foreach (var property in typeOfTEntity.GetProperties())
{
if (property.GetGetMethod().IsVirtual)
{
foreach (var member in context.Context.Entry(CurrentItem).Members)
{
if (member.Metadata.Name == property.Name)
{
context.Context.Entry(member).State = EntityState.Detached;
}
}
}
}
Я получаю сообщение об ошибке: «Тип объекта« ReferenceEntry »не найден. Убедитесь, что тип объекта был добавлен в модель».
Я использую TEntity, потому что я использую больше сущностей в общем классе и использую один и тот же метод для обновления или добавления.
Заранее спасибо.
Edit:
Если я использую сущность (CurrentItem) как не универсальный тип:
(CurrentItem теперь Клиент, а не TEntity)
context.Context.Entry(CurrentItem.Country).State = EntityState.Detached;
context.Context.SaveChanges();
Теперь работает хорошо. Но мне нужно использовать TEntity.