Отношения между двумя объектами не могут быть определены, потому что они присоединены к различным объектам ObjectContext Entity Framework - PullRequest
0 голосов
/ 08 мая 2019

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

Схема модели Entity Framework выглядит следующим образом:

enter image description here

Функция, которая добавляет объект и работает с DataContext:

public async Task AddInterakcijaAsync(Korisnik korisnik, Projekat projekat)
{
        using (ExtentBazaEntities _context = new ExtentBazaEntities())
        {
            _context.Korisnik.FirstOrDefault(a => a.KorisnickoIme == korisnik.KorisnickoIme).Projekat.Add(projekat);
            await _context.SaveChangesAsync();
        }
}

Но место, где появляется ошибка, когда я вызываю эту функцию, вызов этой функции следующий:

AddInterakcijaAsync(k, trenutniProjekat);

1 Ответ

0 голосов
/ 08 мая 2019

Избегайте отправки сущностей за пределы их DbContext. Переданные в Korisniko и Projekat были загружены из DbContext A. Метод инициирует DbContext B и загружает соответствующий Korisniko, однако он пытается связать Projekat из DbContext A, о котором он ничего не знает, но распознает его как объект EF, отслеживаемый другим контекстом. .

Я бы предложил обновить подпись вашего метода, чтобы он просто принимал идентификаторы, поскольку вызов метода инкапсулирует DbContext для обработки вставки.

public async Task AddInterakcijaAsync(int korisnikoIme, int projekatIme)
{
    using (ExtentBazaEntities _context = new ExtentBazaEntities())
    {
        var korisniko = _context.Korisnik.Single(a => a.KorisnickoIme == korisnickoIme)
        var projekat = _context.Projekat.Single(a => a.ProjekatIme == projekatIme);
        korisniko.Projekat.Add(projekat);
        await _context.SaveChangesAsync();
    }
}

Гадание по именам / типам ID. :)

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