如果数据库行中定义的操作不存在数据库行,我该如何更新它们并创建新行?我在代码as described here
中使用工作单元模式如果数据库中不存在新对象,我将使用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”类型的实体具有相同的主键值。确保显式设置的主键值是唯一的。确保在数据库和实体框架模型中正确配置了数据库生成的主键。将实体设计器用于数据库优先/模型优先配置。对代码优先配置使用'HasDatabaseGeneratedOption'流利API或'DatabaseGeneratedAttribute'。
如何使用工作单元模式执行此操作?