2015-06-02 40 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