2015-06-02 7 views
0

Я новичок в инфраструктуре Entity и изо всех сил пытаюсь найти решение для следующего. У меня 3 разных таблицы - Admin, AdminReport и Reports. Admin - это админ-информация о приложении, Admin Report - это данные отчета, которые принадлежат конкретному администратору. Отчеты являются справочной таблицей, содержащей справочные данные отчетов.Обновление для сообщества Entity Framework

Table Relationship

Теперь, когда я добавить эти таблицы, администратор и отчет таблица добавляется в качестве объекта, но AdminReport добавляется в качестве ассоциации.

Я в ситуации, когда мне нужно удалить или вставить записи в отчет администратора, но всякий раз, когда я что-то делаю, Entity Framework пытается обновить мою справочную таблицу «Отчет». Код, как показано ниже:

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

Этот вопрос может помочь вам. 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 аналогичен типу отчетов) в качестве нового отчета, который необходимо добавить. Я решил его решить, когда я взял существующий отчет из таблицы отчетов и добавлю ссылку на adminReport. – Subash

Смежные вопросы