实体框架助理更新

时间:2015-06-02 02:15:05

标签: c# entity-framework

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

Table Relationship

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

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

 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();
                   }
                   }

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

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

1 个答案:

答案 0 :(得分:0)

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

foreach(var itemToCreate in itemsToCreate)

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

通过这个简单的声明,我告诉实体框架更新它与参考表“Report”中的记录的关联。它工作得很好,相关的表也会更新。