无法定义两个对象之间的关系,因为它们已附加到不同的ObjectContext对象。

时间:2019-05-07 21:55:06

标签: c# .net entity-framework

我有两个从数据库生成的类,它们通过多对多关系相互交互。当我想在多对多关系表中添加一条记录时,出现以下错误:两个对象之间的关系无法定义,因为它们被附加到不同的ObjectContext对象上。

实体框架模型图如下:

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 :(得分:0)

避免在DbContext边界之外发送实体。从DbContext A加载了传入的Korisniko和Projekat。该方法启动DbContext B并加载匹配的Korisniko,但是它试图将Projekat与它不了解的DbContext A关联,但将其识别为另一个上下文跟踪的EF实体

我建议您将方法签名更新为仅接受ID,因为方法调用封装了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名称/类型。 :)