当前位置: 首页 > 知识库问答 >
问题:

ASP。NET MVC-附加“X”类型的实体失败

公孙驰
2023-03-14

这是一个模型;

public class Urunler
{
    public int UrunlerID { get; set; }

    public virtual Urunler Urun { get; set; }

    [NotMapped]
    public List<int> SelectedEtiketIds { get; set; }

    public virtual List<UrunEtiketTablo> Etiketler { get; set; }


}

这是一个代码;

if (model.SelectedEtiketIds != null)
                {
                    if (model.Etiketler != null)
                    {
                        if (model.Etiketler.Count > 0)
                        {
                            model.Etiketler.Where(i => !model.SelectedEtiketIds.Contains(i.UrunEtiket.EtiketID)).ToList().ForEach(i => model.Etiketler.Remove(i));
                            List<int> existlbl = model.Etiketler.Select(i => i.UrunEtiket.EtiketID).ToList();
                            db.Etikets.Where(i => model.SelectedEtiketIds.Except(existlbl).Contains(i.EtiketID)).ToList().ForEach(i => model.Etiketler.Add(new UrunEtiketTablo { UrunEtiket = i }));
                        }
                        else
                        {
                            db.Etikets.Where(i => model.SelectedEtiketIds.Contains(i.EtiketID)).ToList().ForEach(i => model.Etiketler.Add(new UrunEtiketTablo { UrunEtiket = i }));
                        }
                    }
                    else
                    {
                        model.Etiketler = db.Urunlers.Where(i => i.UrunlerID == model.UrunlerID).Select(i => i.Etiketler).FirstOrDefault();
                       db.Etikets.Where(i => model.SelectedEtiketIds.Contains(i.EtiketID)).ToList().ForEach(i => model.Etiketler.Add(new UrunEtiketTablo { UrunEtiket = i }));
                    }
                }
                else
                {
                    if (model.Etiketler !=null && model.Etiketler.Count > 0)
                    {
                        model.Etiketler.Clear();
                    }
                }
                   db.Entry(model).State = EntityState.Modified; //error line

                }
                db.SaveChanges();
                return RedirectToAction("Urunler", "DaimiPanel");

当我添加项目到电子邮件列表,我得到这个错误。

附加“Tasarito. Models. UrunEtiketTablo”类型的实体失败,因为另一个相同类型的实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则使用“附加”方法或将实体的状态设置为“未更改”或“修改”时可能会发生这种情况。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态来跟踪图,然后根据需要将非新实体的状态设置为“未更改”或“修改”。

这是交叉表;

public class UrunEtiketTablo
    {
        public int UrunEtiketTabloID { get; set; }

        public virtual Etiket UrunEtiket { get; set; }
    }

我哪里会犯错?泰。

共有1个答案

须志新
2023-03-14

我发现了同样的问题,就我而言,我只是更改了代码

db.Entry(model).State = EntityState.Modified; //error line

进入

db.Set<YourModel>().AddOrUpdate(model);

它工作正常。希望它也能解决你的问题。

 类似资料:
  • 我在代码中偶然发现了一个奇怪的bug。以前是有效的,但现在有时也有效。 我正在使用EF6编辑具有某些关系的实体。为了不编辑关系,我“附加”了它们(参见示例代码)。 我编辑了这些名字以保持简单。 以下行 抛出此错误: 附加类型为“C”的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Mo

  • 简而言之,在发布包装器模型并将一个条目的状态更改为“已修改”期间引发异常。更改状态之前,状态设置为“已分离”,但调用Attach()会引发相同的错误。我正在使用EF6。 请在下面找到我的代码(型号名称已更改以便于阅读) 模型 控制器 如上图所示 引发异常: 附加类型为“A”的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实

  • 错误消息: 正在附加“FaridCRMData”类型的实体。模型。“Customer”失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的 我的代码: FactorService. BaseService.cs:

  • 我一直在搜索这个主题,但没有找到我想要的。基本上,我开始用UML的所有东西,用例,类图来计划一个项目。然后我们决定使用ASP。NET MVC。该应用程序是一种O-Desk或Elance 我有用户,承包商,公司,主持人和管理员。 我有点困惑模型应该如何表示这个用户,以及如何使用asp设置权限和角色。net mvc特性。 在一个正常的应用程序中,我会为他们每个人都创建一个类,他们可能会扩展User,其

  • 我们正在开发具有移动部分和网络用户界面的应用程序。Web UI使用角,我们在后端配置cors时遇到了问题。我们的代码如下(只是对我们的问题很重要的代码): 从stackoverflow上的文档和其他帖子来看,这应该是可行的,但不是。我们错过了什么? thnx 编辑: 这是邮递员的请求: 卷曲'https://guw.azurewebsites.net/api/token'-X OPTIONS-H'

  • 我的WebApi应用程序有一个小问题。当我将新实体添加到我的数据库时,会出现这个问题。 实体: 要在其中向数据库中添加新赌注实体的代码: 在此位置,将我的实体添加到DB中(DB:我的SQL) 调用save方法时,代码会引发以下异常: 附加“WebCar. Domain. Entities. Lot”类型的实体失败,因为另一个相同类型的实体已经具有相同的主键值。如果图形中的任何实体具有冲突的键值,则