public function persist(Entity $entity)
{
$this->checkEntityType($entity);
$this->events->invokeCallbacks(Events::EVENT_BEFORE_PERSIST, $entity);
if ($entity->isDetached()) {
$entity->makeAlive($this->entityFactory, $this->connection, $this->mapper);
$this->events->invokeCallbacks(Events::EVENT_BEFORE_CREATE, $entity);
$result = $id = $this->insertIntoDatabase($entity);
$entity->attach($id);
$this->events->invokeCallbacks(Events::EVENT_AFTER_CREATE, $entity);
} else {
if ($entity->isModified()) {
$this->events->invokeCallbacks(Events::EVENT_BEFORE_UPDATE, $entity);
$result = $this->updateInDatabase($entity);
$this->events->invokeCallbacks(Events::EVENT_AFTER_UPDATE, $entity);
}
$this->persistHasManyChanges($entity);
$entity->markAsUpdated();
}
$this->events->invokeCallbacks(Events::EVENT_AFTER_PERSIST, $entity);
return isset($result) ? $result : null;
}