private object AddElement <T>(IChangeTracker changeTracker, IEntityManager entityManager, T existing, object updateItem, object dbCollection) { if (!_isOwned) { updateItem = changeTracker.AttachAndReloadAssociatedEntity(updateItem); } else if (changeTracker.GetItemState(updateItem) == EntityState.Detached) { var instance = entityManager.CreateEmptyEntityWithKey(updateItem); changeTracker.AddItem(instance); changeTracker.UpdateItem(updateItem, instance); foreach (var childMember in Members) { childMember.Update(changeTracker, entityManager, instance, updateItem); } updateItem = instance; } dbCollection.GetType().GetMethod("Add").Invoke(dbCollection, new[] { updateItem }); if (_isOwned) { changeTracker.AttachCyclicNavigationProperty(existing, updateItem, GetMappedNaviationProperties()); } return(updateItem); }
private object CreateNewPersistedEntity <T>(IChangeTracker changeTracker, T existing, object newValue) where T : class { var instance = Activator.CreateInstance(newValue.GetType(), true); SetValue(existing, instance); changeTracker.AddItem(instance); changeTracker.UpdateItem(newValue, instance); return(instance); }