ensureStored method

  1. @override
FutureOr ensureStored(
  1. O o, {
  2. Transaction? transaction,
  3. TransactionOperation? operation,
})
override

Implementation

@override
FutureOr<dynamic> ensureStored(o,
    {Transaction? transaction, TransactionOperation? operation}) {
  checkNotClosed();

  var id = getID(o, entityHandler: entityHandler);

  if (id == null || entityHasChangedFields(o)) {
    return _ensureStoredImpl(o, transaction, operation);
  } else {
    if (isTrackingEntity(o)) {
      return ensureReferencesStored(o, transaction: transaction)
          .resolveWithValue(id);
    }

    return existsID(id, transaction: transaction).resolveMapped((exists) {
      if (!exists) {
        return _ensureStoredImpl(o, transaction, operation);
      } else {
        return ensureReferencesStored(o, transaction: transaction)
            .resolveWithValue(id);
      }
    });
  }
}