예제 #1
0
        /// <summary>
        ///     Persist the given entity using the behavior specified.
        /// </summary>
        /// <param name="entityContext">
        ///     The entity context.
        /// </param>
        /// <param name="entityType">
        ///     The entity type.
        /// </param>
        /// <param name="entity">
        ///     The entity.
        /// </param>
        /// <param name="behaviors">
        ///     The behaviors.
        /// </param>
        /// <param name="entitiesWritten">
        ///     The entities written.
        /// </param>
        /// <returns>
        ///     The entity key.
        /// </returns>
        private static Key Persist(EntityContext entityContext, Type entityType, object entity, Behaviors behaviors,
                                   IdentitySet entitiesWritten)
        {
            var entityWriter = new EntityWriter(entityContext, entityType, entity, behaviors, entitiesWritten);

            return(entityWriter.Persist());
        }
예제 #2
0
        /// <summary>
        ///     Persist the given entity using the behavior specified.
        /// </summary>
        /// <param name="entityContext">
        ///     The entity context.
        /// </param>
        /// <param name="entityType">
        ///     The entity type.
        /// </param>
        /// <param name="entity">
        ///     The entity.
        /// </param>
        /// <param name="ignoreKeys">
        ///     The keys to ignore.
        /// </param>
        /// <param name="behaviors">
        ///     The behaviors.
        /// </param>
        /// <param name="entitiesWritten">
        ///     The entities written.
        /// </param>
        /// <param name="write">
        ///    if <c>true</c> writes the entity, otherwise only traversing.
        /// </param>
        /// <param name="isRoot">
        ///    if <c>true</c> if entity is the root, otherwise <c>false</c>.
        /// </param>
        /// <returns>
        ///     The entity key.
        /// </returns>
        private static Key Persist(EntityContext entityContext, Type entityType, object entity, ISet <Key> ignoreKeys, Behaviors behaviors,
                                   ISet <object> entitiesWritten, bool write = true, bool isRoot = false)
        {
            var entityWriter = new EntityWriter(entityContext, ignoreKeys, behaviors, entitiesWritten);

            return(entityWriter.Persist(entityType, entity, write, isRoot));
        }
예제 #3
0
        /// <summary>
        ///     Stores an entity instance to the database.
        /// </summary>
        /// <param name="entity">
        ///     The entity to store.
        /// </param>
        /// <param name="ignoreKeys">
        ///     The keys to ignore.
        /// </param>
        /// <param name="behaviors">
        ///     The behaviors.
        /// </param>
        /// <typeparam name="T">
        ///     The entity type.
        /// </typeparam>
        public void Persist <T>(T entity, ISet <Key> ignoreKeys, Behaviors behaviors) where T : class
        {
            EntityWriter.Persist(this, entity, ignoreKeys, behaviors);

            if (behaviors.BypassWriteCache())
            {
                this.entitiesWritten.Remove(entity);
            }
        }
예제 #4
0
        /// <summary>
        ///     Stores an entity instance to the database.
        /// </summary>
        /// <param name="entity">
        ///     The entity to store.
        /// </param>
        /// <param name="behaviors">
        ///     The behaviors.
        /// </param>
        /// <typeparam name="T">
        ///     The entity type.
        /// </typeparam>
        public void Persist <T>(T entity, Behaviors behaviors) where T : class
        {
            if (behaviors.IsCreateNew() && !behaviors.DoNotCache() && !behaviors.BypassWriteCache())
            {
                var entityReference = this.EntityReferenceForType(entity.GetType());
                if (entityReference != null)
                {
                    bool newEntity;
                    var  key = entityReference.GetKeyFromEntity(entity, out newEntity);
                    if (!newEntity)
                    {
                        var entitySpec = new EntitySpec(entityReference, key);
                        this.entitySpecsWritten.Remove(entitySpec);
                    }
                }
            }

            EntityWriter.Persist(this, entity, behaviors);
        }