我是Entity框架的新手,并努力寻找以下解决方案。我有3个不同的表 - 管理员,管理员报告和报告。 Admin是应用程序的管理员详细信息,Admin Report是特定管理员拥有的报告详细信息。 Reports是包含报告参考数据的参考表。
现在,当我添加这些表时,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();
}
}
但是,我收到一条错误消息,指出它无法将重复记录插入报告表。
请求您的帮助以解决此查询。感谢。
答案 0 :(得分:0)
感谢您的帮助。我做了以下更新关联,而不让实体框架更新引用表。
foreach(var itemToCreate in itemsToCreate)
updateAdmin.AdminReports.Add(db.Report.SingleorDefault(item=>item.ReportId == itemToCreate.ReportId));
通过这个简单的声明,我告诉实体框架更新它与参考表“Report”中的记录的关联。它工作得很好,相关的表也会更新。