当客户端向服务器发送更新时,我需要在服务器上创建实体(在服务器上创建的这些条目主要用于审计报告) 根据{{3}},我应该在服务器上执行以下操作:
protected override Dictionary<Type, List<EntityInfo>> BeforeSaveEntities(
Dictionary<Type, List<EntityInfo>> saveMap)
{
...
var auditInput= new AuditItem();
auditInput.CreationTime = DateTime.UtcNow;
var newEntity = _breezeContext.CreateEntityInfo(auditInput);
if (!saveMap.ContainsKey(typeof (auditInput)))
saveMap[typeof (auditInput)] = new List<EntityInfo>();
...
}
public class AuditItem
{
public int AuditItemId { get; set; }
public DateTime CreationTime { get; set; }
}
当每次保存只创建一个AuditItem
时,这非常有效。但是,当在同一个保存操作的服务器上创建多个这些实体时,EF会尖叫,并显示以下错误消息:
AcceptChanges无法继续,因为对象的键值发生冲突 与ObjectStateManager中的另一个对象
调试显示ObjectStateManager
持有AuditInput
的多个实例,密钥为0
,这使得状态管理器认为所有这些实体都是相同的实体。
问题 在服务器中创建它们时,如何帮助breeze生成不同的实体?有没有办法强制它为创建的实体生成新密钥?