Запретить Entity Framework вставлять дочерний объект в родительскую вставку - PullRequest
0 голосов
/ 01 августа 2020

У меня есть модельный класс для групп пользователей. Эта таблица будет состоять из некоторого фиксированного набора данных

public class UserGroup
{
    public int Id { get; set; }

    [Index(IsUnique = true)]
    [StringLength(30)]
    [Required]
    public string UserGroupName { get; set; }
}

и класса пользователей, например

 public class User 
 {  
     public int Id { get; set; }
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public UserGroup UserGroup { get; set; }
 }

Пользователь может принадлежать только к одной группе пользователей. Когда я пытаюсь сохранить пользователя, используя приведенный ниже код, EF также пытается создать новую группу пользователей вместо того, чтобы сопоставлять ее с существующей. что я здесь делаю не так? Как я могу это решить?

 User user = new User();
  .....
  user.UserGroup =_dbContext.UserGroup.FirstOrDefault(x=>x.Id==1)
 _dbContext.Users.Add(user);
 _dbContext.SaveChanges();

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Вам необходимо установить состояние Modified. Если EF его не отслеживает. В противном случае он попытается вставить объект Чили.

  dbContext.UserGroup.State = EntityState.Modified;
0 голосов
/ 01 августа 2020

Проблема возникает из-за помещения всей UserGroup вместо установки ссылки на UserGroup.

 public class User 
 {  
     public int Id { get; set; }
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public int UserGroupId {get;set;}
     public UserGroup UserGroup { get; set; }
 }

Добавьте UserGroupId в свой класс User и вместо этого установите UserGroupId.

 User user = new User();
  .....
  user.UserGroupId =_dbContext.UserGroup.FirstOrDefault(x=>x.Id==1)?.Id;
 _dbContext.Users.Add(user);
 _dbContext.SaveChanges();
...