如何获取对象,以及如何创建不存在的新对象?

时间:2019-04-22 14:52:48

标签: c# entity-framework linq-to-entities

如果数据库行中定义的操作不存在数据库行,我该如何更新它们并创建新行?我在代码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'。

如何使用工作单元模式执行此操作?

0 个答案:

没有答案