【问题标题】:Entity Framework Associate update实体框架关联更新
【发布时间】:2015-06-02 02:15:04
【问题描述】:

我是 Entity 框架的新手,正在努力寻找以下解决方案。我有 3 个不同的表 - Admin、AdminReport 和 Reports。 Admin 是应用程序的管理员详细信息,Admin Report 是特定管理员拥有的报告详细信息。报告是包含报告的参考数据的参考表。

现在,当我添加这些表时,Admin 和 Report 表被添加为实体,但 AdminReport 被添加为关联。

我的情况是,我需要在管理报告中删除或插入记录,但每当我做某事时,实体框架都会尝试更新我的参考表“报告”。代码如下:

 public void UpdateAdminDetails(List<AdminDetails> AdminListtoUpdate)
  {

  foreach(var admin in AdminListtoUpdate )
  {
  var updateAdmin = db.Admins.SingleOrDefault(item => item.adminId == admin.AdminId && !admin.IsNew);


                    updateAdmin.IsAdmin = admin.IsAdmin;
                   updateAdmin.PersonId = admin.PersonId;

// User on the front end can remove few reports associated with the admin

                    var AdminReportIDsListToDelete = admin.AdminReport.Select(d => d.AdminReportId).ToList();
                    var itemsToDelete = updateAdmin.AdminReports.Where(d => !AdminReportIDsListToDelete.Contains(d.AdminReportId)).ToList();
                    foreach (var itemtoDelete in itemsToDelete)
                       admin.AdminReport.Remove(itemtoDelete);

// User on the front end can add new reports to the admin.           
                   var AdminReportIDsListToCreate = updateAdmin.AdminReports.Select(c => c.AdminReportId).ToList();
                   var itemsToCreate = admin.AdminReports.Where(c => !AdminReportIDsListToCreate.Contains(c.AdminReportId)).ToList();
                    updateAdmin.AdminReports.AddRange(itemsToCreate);
                   db.saveChanges();
                   }
                   }

但是,我收到一条错误消息,指出它无法将重复记录插入到报告表中。

请求您的帮助以解决此查询。谢谢。

【问题讨论】:

  • 这个 SO 问题可以帮助你。 stackoverflow.com/questions/7489695/…
  • 非常感谢 Jlvaquero... 它解决了我删除现有报告的问题。但添加报告的问题仍然是个问题。
  • 尝试了其他几个选项,但一点运气都没有......这可能看起来很奇怪,但我已经没有选项了,我正在努力寻找相同的解决方案。 dbContext.EmployerAdmins.Attach(updateAdmin); dbContext.Entry(updateAdmin).Entity.EmployerAdminReports.Add(empAdmin.EmployerAdminReport.SingleOrDefault(item => item.EmployerAdminReportId == addItem));
  • 更新就像删除。忘记 AdminReport 关系。只需adminToUpdate.ReportList.Add(newReport)
  • 谢谢 Jlvaquero... 我解决了这个问题。我已经在我的回答中详细说明了解决方案。非常感谢您的帮助。

标签: c# entity-framework


【解决方案1】:

感谢您的帮助。我做了以下更新关联,而不让实体框架更新引用表。

foreach(var itemToCreate in itemsToCreate)

 updateAdmin.AdminReports.Add(db.Report.SingleorDefault(item=>item.ReportId == itemToCreate.ReportId));

通过这个简单的语句,我告诉实体框架更新与它在参考表“报告”中的记录的关联。它工作得很好,并且关联的表得到更新。

【讨论】:

  • updateAdmin.Reports.Add(existingReport) 不起作用有什么原因吗?因为在实体中接触关系表会绕过 ORS 精神。
  • jlvaquero - updateAdmin.Reports.Add(newReport) 尝试在报告表中添加新记录。由于某些原因,它将newReport(尽管newReport的类型与Reports相同)识别为需要添加的新Report。当我从报告表中选择现有报告并添加对 adminReport 的引用时,我得到了解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多