C # Entity Framework «На объектный объект нельзя ссылаться несколькими экземплярами IEntityChangeTracker» - PullRequest
20 голосов
/ 26 февраля 2011

Эта ошибка часто выдается, но я не могу найти решение.Я новичок в Entity Framework и в моем первом подходе я получил эту ошибку.

Это то, что у меня есть.У меня есть корпоративный класс и отраслевой класс.Оба класса имеют свой собственный репозиторий.У компании есть один филиал, а в одном филиале может быть несколько компаний.

В моем графическом интерфейсе я заполняю комбо объектами Branch, которые я получаю из своего репозитория BranchRepository:

    public IList<Branch> GetAllBranches()
    {
        var query = _context.Branches;

        IList<Branch> branches = query.ToList();

        return branches;
    }

Это результатявляется источником данных отраслевого списка.

Когда я хочу спасти компанию, я делаю что-то вроде этого:

company.VisitorAddress = txtVisitAddress.Text;
company.City = txtCity.Text;
company.CompanyName = txtCompany.Text;
company.PhoneNumber = txtPhoneNumber.Text;
company.ZipCode = txtZipcode.Text;
company.Branch = ((Branch)cmbBranches.SelectedItem);
company.Website = txtWebsite.Text;

Затем я вызываю репозиторий моей компании, чтобы спасти мою компанию.Вот как выглядит метод сохранения:

public bool Save(Company company)
{
    _context.AddToCompanies(company);   // <-- This is where the error is thrown.
    _context.SaveChanges();

    return true;
}

Когда вызывается метод сохранения, я получаю ошибку «На объект сущности нельзя ссылаться несколькими экземплярами IEntityChangeTracker».

Очевидно, что я делаю что-то не так, но что?

1 Ответ

22 голосов
/ 26 февраля 2011

Создаете ли вы новый ObjectContext экземпляр для каждого вашего хранилища?Это может быть источником проблем, потому что когда вы добавляете Branche в Company, он пытается добавить его к экземпляру ObjectContext, что невозможно сделать, поскольку он все еще связан с экземпляром ObjectContext, используемым для заполнения комбинированного списка.Для этого нужно поделиться экземпляром ObjectContext среди ваших репозиториев.Другая возможность - Detach Отделение от первого хранилища, но оно может иметь другие последствия.

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