【问题标题】:The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects Entity Framework无法定义两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象实体框架
【发布时间】:2019-05-07 21:55:05
【问题描述】:

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

实体框架模型图如下:

添加对象的函数,与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();
        }
}

但是弹出错误的地方是我调用这个函数的时候,这个函数的调用是next:

AddInterakcijaAsync(k, trenutniProjekat);

【问题讨论】:

  • projekat 在哪里以及如何被实例化?
  • 从错误看来,您传递然后添加的 Projekat 实例绑定到不同的上下文。在您的功能中意味着您正在更新上下文,因此是问题

标签: c# .net entity-framework


【解决方案1】:

避免将实体发送到其 DbContext 的边界之外。传入的 Korisniko 和 Projekat 是从 DbContext A 加载的。该方法启动 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 名称/类型。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多