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);
      }
    });
  }
}