internal protected override void Insert(Entity entity) { _dp.EnsureStore(); string key = _dp.GetRealKey(entity); //在生成 Id 时,为某个模型生成临时使用的本地 Id。 if (!entity.HasId) { var found = _dp.FindByRealKey(key); if (found != null) { //如果这个实体已经存在于内存中,则更新新对象的 Id,并在最后把新对象的数据存储起来即可。 entity.LoadProperty(Entity.IdProperty, found.Id); } else { var newId = entity.KeyProvider.NewLocalId(); entity.LoadProperty(Entity.IdProperty, newId); } } //有些实体并不一定通过 CDU 接口保存到 _memoryRows 中,而是在查询时临时生成。 //这时,也需要把这些实体都加入到 _memoryRows 中。 _dp._memoryRows[key] = _dp.ToRow(entity); }
public override void InsertToPersistence(Entity entity) { _dp.EnsureStore(); string key = _dp.GetRealKey(entity); //在生成 Id 时,为某个模型生成临时使用的本地 Id。 var idProvider = (entity as IEntityWithId).IdProvider; if (!idProvider.IsAvailable(entity.Id)) { var found = _dp.FindByRealKey(key); if (found != null) { //如果这个实体已经存在于内存中,则更新新对象的 Id,并在最后把新对象的数据存储起来即可。 entity.LoadProperty(Entity.IdProperty, found.Id); } else { var newId = idProvider.NewLocalValue(); entity.LoadProperty(Entity.IdProperty, newId); } } //有些实体并不一定通过 CDU 接口保存到 _memoryRows 中,而是在查询时临时生成。 //这时,也需要把这些实体都加入到 _memoryRows 中。 _dp._memoryRows[key] = _dp.ToRow(entity); }