Example #1
0
        /// <summary>
        /// An immediate identity insert with identity_insert on just for this single entity, unless queued is true.  Queued identity insert entities are inserted if nothing given.
        /// </summary>
        /// <param name="sqlEntity"></param>
        public void IdentityInsert(TSqlEntity sqlEntity = null, Boolean queued = false)
        {
            if (sqlEntity == null)
            {
                FlushIdentityInserts();
                return;
            }

            // Queue identity insert...
            IModifiable modifiableEntity = sqlEntity as IModifiable;

            if (modifiableEntity != null)
            {
                modifiableEntity.CreatedDate  = NowDateTime;
                modifiableEntity.ModifiedDate = NowDateTime;
            }
            else if (sqlEntity is ICreatable)
            {
                ((ICreatable)sqlEntity).CreatedDate = NowDateTime;
            }
            var insertColumns = $"{GetIdentityInsertColumns()},{InsertColumns()}";
            var insertValues  = $"{GetIdentityInsertValues(sqlEntity)},{GetInsertValues(sqlEntity)}";

            QueuedIdentityInserts.Append(QueueIdentityInsertColumnsPattern.FormatX(TableName, insertColumns, insertValues));

            if (!queued)
            {
                FlushIdentityInserts();
            }
        }
Example #2
0
        public void FlushIdentityInserts()
        {
            if (QueuedIdentityInserts.IsEmpty())
            {
                return;
            }

            if (SaveChangesTransactionally)
            {
                Context.BeginTransaction();
            }

            String insertStatement = IdentityInsertColumnsPattern.FormatX(QueuedIdentityInserts.ToString(), TableName);

            _queuedIdentityInserts = null;
            Context.ExecuteScalar(insertStatement, new SqlParameter[] { });
        }