Почему свойство навигации обновляет другую сущность при выполнении обновления в моем DataContext?(C # Entity Framework) - PullRequest
1 голос
/ 22 декабря 2011

Я сталкиваюсь с ситуацией, когда использую Entity Framework (EF), и это меня полностью озадачило.Я делаю простое обновление, и я получаю ошибку

Нарушение ограничения PRIMARY KEY 'PK__tblProducts_Mark__03E07F87'.Невозможно вставить повторяющийся ключ в объект "healthc.tblProducts_MarketSegmentGroups".Оператор был прекращен.

Позвольте мне рассказать вам об этой проблеме.

Я использую веб-формы и запускаю событие нажатия кнопки, чтобы сохранить некоторые данные в нескольких элементах управления текстового поля намоя страница.

В моей базе данных есть таблица tblMetaProducts, которая используется для хранения информации о продуктах различных поставщиков, с которыми мы работаем.Объект для этой таблицы называется Products.

У меня есть еще одна таблица, которая называется tblTechAssessment, которая содержит данные для технических вопросов о продукте поставщика (например, какая операционная система может работать с программным обеспечением, номер версии и т. Д.).Объект для этой таблицы называется TechnicalAssessment.У продукта может быть много технических оценок, и они связаны по идентификатору продукта.

Наконец-то у меня есть таблица поиска в базе данных с именем tblProducts_MarketSegmentGroups, в которой содержится идентификатор продукта и другой идентификатор (который нас не интересует)для этой проблемы).Объект для этой таблицы называется ProductMarketSegmentGroup.у продукта может быть много групп сегментов рынка продуктов, и они выпускаются по идентификатору продукта.

EDMX Screen Shot

Вот код, который я выполняю для выполнения сохранения EF

private void UpdateTechnicalAssessments(int productID)
{
    var technicalAssessments = VendorDirectoryController.GetTechnicalAssessments(productID);
    var technicalAssessmentTypes = Enum.GetValues(typeof(TechnicalAssessmentType)).Cast<TechnicalAssessmentType>();
    foreach (var technicalAssessmentType in technicalAssessmentTypes)
    {
        var typeName = technicalAssessmentType.ToString();
        var id = "SaveToProduction" + typeName + "TextBox";
        var results = ProductInformationPanel.FindDescendantsByType<TextBox>().Single(x => x.ID == id).Text;
        technicalAssessments.Single(x => x.QuestionID == (int)technicalAssessmentType).Results = results;
    }

    VendorDirectoryController.SaveChanges();            
}

Метод SaveChanges () углубляется до уровня моего домена и вызывает метод dataContext.SaveChanges ().

Итак, мои вопросы:

1) Что я могу сделать дляполучить это, чтобы сохранить мои объекты технической оценки?2) Почему мое сохранение влияет на сущность ProductMarketSegmentGroup?

Ответы [ 2 ]

1 голос
/ 14 апреля 2012

Возможно, вы столкнулись с ошибкой в ​​EF. Я также наткнулся на что-то подобное (хотя я использую хранимые процедуры).

Решением было применить исправление, упомянутое в: Исправление: основная сущность в приложении SQL генерирует ненужные обновления - все равно влияет ли это на EF 4.3.1?

0 голосов
/ 10 января 2012

Решение, которое я использовал в итоге, заключалось в том, чтобы наш администратор базы данных создал процедуру обновления. Я так и не смог выяснить, почему свойство навигации вызывало такой шум.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...