Почему возникает ConcurrencyException, когда я изменял добавленное состояние объекта как измененное - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть сущность следующим образом

public class Application
{
    public int Id { get; set; }
    public string OfficeName { get; set; }
    public Person Persons { get; set; }
}

 public class Person
 {
     public int Id { get; set; }
     public string Name{ get; set; }
     public List<PersonContact> Contacts{ get; set; }
 }

 public class PersonContact
 {
     public int Id { get; set; }
     public string ContactName { get; set; }
 }

 public void InsertApplication(Application app)
 {
    _applicationDbSet.Add(app);
    _personDbSet.AddOrUpdate(app.Person);
    _dbContext.SaveChanges(); //exception occur here
 }

Я пытаюсь вставить Application в БД.После добавления заявки в DBSet я проверяю, не вышел ли человек из БД по имени.Когда я смотрю ChangeTraker все хорошо видно.Application добавлено.Person изменено и PersonContact добавлено.Когда я вызываю SaveChanged, я получаю сообщение об ошибке:

Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: «Ожидается, что операция с базой данных затронет 1 строку (и), но фактически затронет 104 строки (ей).Данные могут быть изменены или удалены с момента загрузки объектов.

Почему возникает доза этого исключения?Может кто-нибудь объяснить, почему, если это нормально

1 Ответ

0 голосов
/ 23 сентября 2019

Если база данных является сервером MS Sql, вы можете запустить трассировку с профилем SQL для отладки запроса SQL.

Кажется, у ваших классов нет объявленного первичного ключа

public class Application
{
     [Key] //key attribut
    public int Id { get; set; }
    public string OfficeName { get; set; }
    public Person Persons { get; set; }
}

 public class Person
 {
     [Key] //key attribut
     public int Id { get; set; }
     public string Name{ get; set; }
     public List<PersonContact> Contacts{ get; set; }
 }

 public class PersonContact
 {
     [Key] //key attribut
     public int Id { get; set; }
     public string ContactName { get; set; }
 }

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