【发布时间】: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