【问题标题】:Entity object cannot be referenced by multiple instances [duplicate]实体对象不能被多个实例引用[重复]
【发布时间】:2018-02-09 16:44:12
【问题描述】:

我正在向数据库中插入一些对象,但出现以下错误:

“System.InvalidOperationException”类型的异常发生在 System.Data.Entity.dll 但未在用户代码中处理

附加信息:实体对象不能被 IEntityChangeTracker 的多个实例。

我已尝试研究并找到问题,但找不到解决和理解问题的正确方法。任何帮助表示赞赏。

这是导致错误的小源部分:

SysUsers User = GetUser()
foreach (int country in data.countries) {
        foreach (int street in data.streets)
        {
            BrowsedData tempBrowsed = new BrowsedData();
            MapInfo tempInformation = WorldInformationController.FindInformation(country, street);
            tempBrowsed.Information = tempInformation;
            tempBrowsed.User = User;
            tempBrowsed.UpdatedBy = User;
            tempBrowsed.sDateTime = data.IndividualFiscalYearEnds
                                .Where(a => a.C_ID == country)
                                .Select(a => a.LastDate).FirstOrDefault();
            this.Database.BrowsedData.Add(tempBrowsed);
            this.Database.SaveChanges();
        }
    }

错误表示这一行:this.Database.BrowsedData.Add(tempBrowsed);

【问题讨论】:

  • 试试tempBrowser.sDateTime = DateTime.Parse(data.IndividualFiscalYearEnds.Where(a => a.C_ID == country).Select(a => a.LastDate).FirstOrDefault()?.ToString())
  • 据我所知“?”不能应用于 DateTIme。
  • 是的,你是对的,除非它可以为空DateTime?
  • 看起来像 tempBrowsed.Information = tempInformation;是问题所在,它可能在不同的上下文中,您可以分配 id 来代替
  • 你的 DbContext 管理是什么样的?如果您使用 mvc,您是在 BeginRequest 处创建一次上下文并将其传递给所有控制器,还是使用 IoC 容器在 Web 请求范围内对其进行实例化?

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

您正在尝试将一个实体附加到您的上下文,但它已经附加到另一个。

你检查过这个https://stackoverflow.com/a/10194299/1481690

我假设同样的问题

BrowsedData and MapInfo 没有使用相同的上下文实例

这也是同一线程中的另一个答案,可能对您的情况有所帮助https://stackoverflow.com/a/27860667/1481690

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多