public void Evict(DataAccessObject value) { if (this.dataAccessObjectDataContext.isCommiting) { return; } if (value.GetAdvanced().IsNew) { if (value.GetAdvanced().PrimaryKeyIsCommitReady) { this.newObjects.Remove(value); } else { this.objectsNotReadyForCommit?.Remove(value); } return; } var internalDao = value.ToObjectInternal(); var predicate = internalDao?.DeflatedPredicate; if (predicate != null) { this.objectsByPredicateCache?.Remove(predicate); return; } if (value.GetAdvanced().IsMissingAnyDirectOrIndirectServerSideGeneratedPrimaryKeys) { return; } var id = this.getIdFunc(value); this.objectsDeleted?.Remove(id); this.objectsByIdCache.Remove(id); }
public DataAccessObject Cache(DataAccessObject value, bool forImport) { if (this.dataAccessObjectDataContext.isCommiting) { return(value); } if (value.GetAdvanced().IsNew) { if (value.GetAdvanced().PrimaryKeyIsCommitReady) { DataAccessObject result; if (this.newObjects.TryGetValue(value, out result)) { if (result != value) { throw new ObjectAlreadyExistsException(value, null, null); } } this.newObjects[value] = value; this.objectsNotReadyForCommit.Remove(value); if (value.GetAdvanced().NumberOfPrimaryKeysGeneratedOnServerSide > 0) { return(value); } } else { if (!this.objectsNotReadyForCommit.Contains(value)) { this.objectsNotReadyForCommit.Add(value); } return(value); } } var internalDao = value.ToObjectInternal(); var predicate = internalDao?.DeflatedPredicate; if (predicate != null) { if (forImport) { throw new InvalidOperationException("Cannot import predicated deflated object"); } DataAccessObject existing; if (this.objectsByPredicateCache.TryGetValue(predicate, out existing)) { existing.ToObjectInternal().SwapData(value, true); return(existing); } this.objectsByPredicateCache[predicate] = value; return(value); } if (value.GetAdvanced().IsMissingAnyDirectOrIndirectServerSideGeneratedPrimaryKeys) { return(value); } var id = this.getIdFunc(value); if (!forImport) { DataAccessObject outValue; if (this.objectsByIdCache.TryGetValue(id, out outValue)) { var deleted = outValue.IsDeleted(); outValue.ToObjectInternal().SwapData(value, true); if (deleted) { outValue.ToObjectInternal().SetIsDeleted(true); } return(outValue); } } if (this.objectsDeleted != null) { DataAccessObject existingDeleted; if (this.objectsDeleted.TryGetValue(id, out existingDeleted)) { if (!forImport) { existingDeleted.ToObjectInternal().SwapData(value, true); existingDeleted.ToObjectInternal().SetIsDeleted(true); return(existingDeleted); } else { if (value.IsDeleted()) { this.objectsDeleted[id] = value; } else { this.objectsDeleted.Remove(id); this.objectsByIdCache[id] = value; } return(value); } } } this.objectsByIdCache[id] = value; return(value); }
public DataAccessObject Cache(DataAccessObject value, bool forImport) { if (this.dataAccessObjectDataContext.isCommiting) { return(value); } if (value.GetAdvanced().IsNew) { if (value.GetAdvanced().PrimaryKeyIsCommitReady) { if (this.newObjects.TryGetValue(value, out var result)) { if (result != value) { throw new ObjectAlreadyExistsException(value, null, null); } } this.newObjects[value] = value; this.objectsNotReadyForCommit?.Remove(value); if (value.GetAdvanced().NumberOfPrimaryKeysGeneratedOnServerSide > 0) { return(value); } } else { if (!(this.objectsNotReadyForCommit?.Contains(value) ?? false)) { (this.objectsNotReadyForCommit = this.objectsNotReadyForCommit ?? new HashSet <DataAccessObject>(ObjectReferenceIdentityEqualityComparer <IDataAccessObjectAdvanced> .Default)) .Add(value); } return(value); } } var internalDao = value.ToObjectInternal(); var predicate = internalDao?.DeflatedPredicate; if (predicate != null) { if (forImport) { throw new InvalidOperationException("Cannot import predicated deflated object"); } if (this.objectsByPredicateCache != null) { if (this.objectsByPredicateCache.TryGetValue(predicate, out var existing)) { existing.ToObjectInternal().SwapData(value, true); return(existing); } } (this.objectsByPredicateCache = this.objectsByPredicateCache ?? new Dictionary <LambdaExpression, DataAccessObject>())[predicate] = value; return(value); } if (value.GetAdvanced().IsMissingAnyDirectOrIndirectServerSideGeneratedPrimaryKeys) { return(value); } var id = this.getIdFunc(value); if (!forImport) { if (this.objectsByIdCache.TryGetValue(id, out var outValue)) { var deleted = outValue.IsDeleted(); outValue.ToObjectInternal().SwapData(value, true); if (deleted) { outValue.ToObjectInternal().SetIsDeleted(true); } return(outValue); } } if (this.objectsDeleted != null) { if (this.objectsDeleted.TryGetValue(id, out var existingDeleted)) { if (!forImport) { existingDeleted.ToObjectInternal().SwapData(value, true); existingDeleted.ToObjectInternal().SetIsDeleted(true); return(existingDeleted); } else { if (value.IsDeleted()) { this.objectsDeleted[id] = value; } else { this.objectsDeleted.Remove(id); this.objectsByIdCache[id] = value; } return(value); } } } this.objectsByIdCache[id] = value; return(value); }