2015-06-02 34 views
0

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

Table Relationship

现在,当我添加这些表,管理和报告表添加为实体,但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(); 
        } 
        } 

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

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

+0

这个SO问题可以帮助你。 http://stackoverflow.com/questions/7489695/how-to-remove-relationship-between-two-entities – jlvaquero

+0

非常感谢Jlvaquero ...它解决了我的问题,删除现有的报告。但添加报告的问题仍然是一个问题。 – Subash

+0

尝试了其他几个选项,但没有运气......它可能看起来很奇怪,但我没有选择,我正在努力寻找同样的解决方案。 dbContext.EmployerAdmins.Attach(updateAdmin); dbContext.Entry(updateAdmin).Entity.EmployerAdminReports.Add(empAdmin.EmployerAdminReport.SingleOrDefault(item => item.EmployerAdminReportId == addItem)); – Subash

回答

0

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

foreach(var itemToCreate in itemsToCreate) 

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

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

+0

'updateAdmin.Reports.Add(existingReport)'不起作用吗?因为触摸实体中的关系表会绕过ORS的精神。 – jlvaquero

+0

jlvaquero - updateAdmin.Reports.Add(newReport)试图在报表中添加新记录。出于某些原因,它将newReport识别为需要添加的新报告(尽管newReport的类型与Reports相同)。当我从报告表中选择现有报告并添加对adminReport的引用时,我得到了解决。 – Subash