Как я могу обновить строки моей базы данных и создать новые строки, если они не существуют с операциями, определенными в контексте моей БД?Я использую шаблон единицы работы в своем коде , как описано здесь
Я использую метод DefaultIfEmpty()
для создания новых объектов, если их нет в базе данных.
// this code runs every 10 sec
foreach(/* possible values for property in contract entity */)
{
var contract = unitOfWork.OptionsContractRepository
.Get(/* loop variable match */)
.DefaultIfEmpty(new OptionsContract { /* set default property values */}).Single();
// contract has a list of 'marks'
var mark = contract.OptionsMarks.Where(/* property filter */).DefaultIfEmpty(new OptionsMark { /* set default property values */}).Single();
// update some properties in 'mark'...
mark.OptionsContract = contract; // set 'contract' for the 'mark'
unitOfWork.OptionsContractRepository.Insert(contract);
}
unitOfWork.Save();
Я хочу, чтобы код не беспокоился о том, существует ли объект в базе данных, а просто создавал новые на лету.Я получаю ошибки при попытке сохранить все в базе данных:
System.InvalidOperationException: 'Изменения в базе данных были успешно приняты, но произошла ошибка при обновлении контекста объекта.ObjectContext может быть в несовместимом состоянии.Внутреннее сообщение об исключении: сбой при сохранении или принятии изменений, так как несколько сущностей типа 'UlyssesPriceModel2.OptionsContract' имеют одинаковое значение первичного ключа.Убедитесь, что явно установленные значения первичного ключа являются уникальными.Убедитесь, что сгенерированные базой данных первичные ключи правильно настроены в базе данных и в модели Entity Framework.Используйте Entity Designer для конфигурации базы данных сначала / модели первой.Используйте свободный API «HasDatabaseGeneratedOption» или «DatabaseGeneratedAttribute» для конфигурации Code First. '
Как я могу сделать это с шаблоном единицы работы?