Я сталкиваюсь с ситуацией, когда использую Entity Framework (EF), и это меня полностью озадачило.Я делаю простое обновление, и я получаю ошибку
Нарушение ограничения PRIMARY KEY 'PK__tblProducts_Mark__03E07F87'.Невозможно вставить повторяющийся ключ в объект "healthc.tblProducts_MarketSegmentGroups".Оператор был прекращен.
Позвольте мне рассказать вам об этой проблеме.
Я использую веб-формы и запускаю событие нажатия кнопки, чтобы сохранить некоторые данные в нескольких элементах управления текстового поля намоя страница.
В моей базе данных есть таблица tblMetaProducts, которая используется для хранения информации о продуктах различных поставщиков, с которыми мы работаем.Объект для этой таблицы называется Products.
У меня есть еще одна таблица, которая называется tblTechAssessment, которая содержит данные для технических вопросов о продукте поставщика (например, какая операционная система может работать с программным обеспечением, номер версии и т. Д.).Объект для этой таблицы называется TechnicalAssessment.У продукта может быть много технических оценок, и они связаны по идентификатору продукта.
Наконец-то у меня есть таблица поиска в базе данных с именем tblProducts_MarketSegmentGroups, в которой содержится идентификатор продукта и другой идентификатор (который нас не интересует)для этой проблемы).Объект для этой таблицы называется ProductMarketSegmentGroup.у продукта может быть много групп сегментов рынка продуктов, и они выпускаются по идентификатору продукта.
Вот код, который я выполняю для выполнения сохранения 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?