возникает System.InvalidOperationException: в моем WPF приложении

Я пишу Wpf приложение следуя паттерну MVVM у меня есть DataGrid для просмотра данных в моей View, а также 4 TextBox 1 Combobox и Button для добавления новых данных, я использую Entity Framework core чтобы проводить CRUD с данными вот мои: Combobox:

 <ComboBox ItemsSource="{Binding NewWorker.JobTitles}"
           SelectedItem="{Binding NewWorker.JobTitle, UpdateSourceTrigger=PropertyChanged}">

     <ComboBox.ItemTemplate>
         <DataTemplate>
             <TextBlock Text="{Binding Title}"/>
         </DataTemplate>
     </ComboBox.ItemTemplate>

 </ComboBox>

Worker class:

 public class Worker : ObservableObject
 {
     private int _id;
     private string _name;
     private string _secondName;
     private int _age;
     private string _email;
     private List<JobTitle> _jobTitles;

     private int _jobTitleId;
     private JobTitle? _jobTitle;

     public int Id {
         get => _id;
         set => Set(ref _id, value); 
     }
     public string Name 
     { 
         get => _name; 
         set => Set(ref _name, value);
     }
     [NotMapped]
     public List<JobTitle> JobTitles
     {
         get => _jobTitles;
         set => Set(ref _jobTitles, value);
     }
     public int JobTitleId
     {
         get => _jobTitleId;
         set => Set(ref _jobTitleId, value);
     }
     public JobTitle? JobTitle
     {
         get => _jobTitle; 
         set => Set(ref _jobTitle, value);
     }

 }

JobTitle class:

    public class JobTitle : ObservableObject
    {
        private int _id;
        private string _title;
        private ObservableCollection<Worker> _workers;

        public int Id 
        { 
            get => _id; 
            set => Set(ref _id, value); 
        }
        public string Title
        {
            get => _title;
            set => Set(ref _title, value);
        }
        public ObservableCollection<Worker> Workers
        {
            get => _workers; 
            set => Set(ref _workers, value);
        }
        public override bool Equals(object? obj)
        {
            return (obj==null || obj is not JobTitle) ? false : Title == (obj as JobTitle).Title;
        }
        public override int GetHashCode()
        {
            return Title.GetHashCode();
        }
    }
}

ViewModel for View with Combobox:

public class WorkersDataTableVM : ObservableObject
{
    private WorkerRepository _workerRepository;
    private JobTitleRepository _jobTitleRepository;
    private ObservableCollection<Worker> _workers;
    private Worker _newWorker;

    public ObservableCollection<Worker> Workers
    {
        get => _workers;
        set => Set(ref _workers, value);
    }
    public Worker NewWorker
    {
        get => _newWorker;
        set => Set(ref _newWorker, value);
    }

    public RelayCommand AddWorkerCommand { get; set; }


    public WorkersDataTableVM() 
    {
        _workerRepository = new WorkerRepository();
        _jobTitleRepository = new JobTitleRepository();
        Workers = new ObservableCollection<Worker>(_workerRepository.GetAllWorkers());
        NewWorker = new Worker();
        LoadData();
        AddWorkerCommand = new RelayCommand(AddWorker,CanAddWorker);
    }

     private bool CanAddWorker(object arg)
 {
     bool flag = false;
     if (NewWorker.Name != default(string) && NewWorker.SecondName != default(string) && NewWorker.Age != default(int) && NewWorker.JobTitleId != default(int))
     {
         flag = true;
     }
     return flag;
 }

    private void AddWorker(object obj)
    {
        Workers.Add(NewWorker);
        _workerRepository.AddWorker(NewWorker);
        NewWorker = new();
    }

    private void LoadData()
    {
        var workers = _workerRepository.GetAllWorkers();
        var jobTitle = _jobTitleRepository.GetAllJopTitles();
        Workers = new ObservableCollection<Worker>(workers);
        foreach (Worker worker in Workers)
        {
            worker.JobTitles = jobTitle;
        }
        NewWorker.JobTitles = jobTitle;
    }

}

я вообще не понимаю из-за чего вылетает исключение: System.InvalidOperationException: 'The instance of entity type 'JobTitle' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.' я ради теста написал маленькое консольное приложение которое (по моему мнению) делает абсолютно тоже самое и оно работает:

public class User
{
    public int Id { get; set; }
    public string? Name { get; set; }
    [NotMapped]
    public List<Company> Companies { get; set; }
    public int CompanyId { get; set; }     
    public Company? Company { get; set; }    
}
public class Company
{
    public int Id { get; set; }
    public string? Name { get; set; } 

    public List<User> Users { get; set; } = new();

    public override bool Equals(object? obj)
    {
        return (obj == null || obj is not Company) ? false : Name == (obj as Company).Name;
    }
    public override int GetHashCode()
    {
        return Name.GetHashCode();
    }
}
public class Program
{
    static void Main(string[] args)
    {
        using (ApplicationContext db = new ApplicationContext())
        {  
            User user = new User();
            
            user.Companies = db.Companies.ToList();

            user.Name = "Name";
            user.Company = user.Companies[0];

            db.Users.Add(user);     
            db.SaveChanges();

        }
    }

Проблема вряд ли в моем Combobox и привязке к нему, я попробовал в коде создать новый объект, но все равно возникает это исключение.

P.S. Исключение не возникает при передаче JobTitle по Id, но я не очень хочу использовать такой вариант так как тогда придется придумывать лишние конвертеры из ID в SelectedID


Ответы (0 шт):