System.InvalidOperationException: присоединение объекта типа 'QC.Models.Defect' завершилось неудачно, поскольку другой объект того же типа - PullRequest
0 голосов
/ 27 сентября 2018

Посмотри на мой код

using (MyBridgeContext context = new MyBridgeContext())
                {
                    context.Users.Attach(user); //both working fine
                    context.Orders.Attach(order);

                    foreach (Defect def in defectList.Items)
                    {
                        if (defectList.SelectedItem == def)
                        {
                            context.Defects.Attach(def);//throwing error
                            defect = def;
                        }
                    }

                    DefectEntry entry = new DefectEntry();
                    entry.user = user;
                    entry.defect = defect;
                    entry.order = order;
                    entry.dt = DateTime.Now;

                    context.Entries.Add(entry);
                    context.SaveChanges();

                    this.Content = new MainMonitoring(ref order, ref user);
                } <br />

Когда я присоединяю пользователя и порядок, он отлично работает, даже если такие объекты с их первичным ключом существуют в базе данных (это причина, по которой я присоединяюсь, я не собираюсь создавать новый объект)просто прикрепите его к входу).Но когда я пытаюсь прикрепить дефект, он выдает ошибку System.InvalidOperationException.Итак, это комбинированный список дефектов: (Программа загружает список дефектов, и когда пользователь выбирает его, он должен быть присоединен к записи):

private void loadDefects()
    {
        MyRepository rep = new MyRepository();
        var defects = rep.GetDefects();
        foreach(var def in defects)
        {
            defectList.Items.Add(def);
        }
        defectList.DisplayMemberPath = "Name"; //defectList is comboBox
    } <br /> <br />

Итак, это MyRepository:

public class MyRepository
{
    public List<Defect> GetDefects()
    {
        MyBridgeContext context = new MyBridgeContext();
        return context.Defects.AsNoTracking().ToList(); //AsNoTracking doing nothing
    }
    public List<User> GetUsers()
    {
        MyBridgeContext context = new MyBridgeContext();
        return context.Users.AsNoTracking().ToList();
    }
    public List<Order> GetOrders()
    {
        MyBridgeContext context = new MyBridgeContext();
        return context.Orders.AsNoTracking().ToList();
    }
}
...