public virtual void SaveChanges() { foreach (var item in _uow.Flush()) { var repository = GetRepository(item); if (repository == null) { throw new InvalidOperationException($"A repository for type {item} was not supplied"); } var mapper = repository.Mapper; var aggregate = item; var state = _state.Get(item); if (state.Status == EntityStatus.Deleted) { mapper.Delete(item, state); Publish(ProxyUtils.GetTargetEntityType(item), x => x.Delete(aggregate, this)); } else if (state.Status == EntityStatus.Dirty) { mapper.Update(item, state); Publish(ProxyUtils.GetTargetEntityType(item), x => x.Update(aggregate, this)); } else if (state.Status == EntityStatus.New) { mapper.Insert(item, state); Publish(ProxyUtils.GetTargetEntityType(item), x => x.Create(aggregate, this)); } state.Clean(); } Flushed(this, new GraphSessionFlushedEventArgs(this)); }
public void Register(object item) { var state = _entityStateCache.Get(item); if (state.IsReadonly) { return; } if (_items.Contains(item)) { return; } _items.Add(item); OnRegistered(item); }
public void Add(T item) { AddInternal(item); var parentState = _state.Get(_parent); parentState.Dirty(); }
public void Intercept(IInvocation invocation) { if (IsSetter(invocation)) { _state.Get(invocation.InvocationTarget).Dirty(); } if (invocation.InvocationTarget == null) { return; } invocation.Proceed(); }
public void Delete(object item) { _entityStateCache.Get(item).Delete(); }