示例#1
0
        public static TrackingState ConvertState(EFCore.EntityState state)
        {
            switch (state)
            {
            case EFCore.EntityState.Detached:
                return(TrackingState.Unchanged);

            case EFCore.EntityState.Unchanged:
                return(TrackingState.Unchanged);

            case EFCore.EntityState.Added:
                return(TrackingState.Added);

            case EFCore.EntityState.Deleted:
                return(TrackingState.Deleted);

            case EFCore.EntityState.Modified:
                return(TrackingState.Modified);

            default:
                throw new ArgumentOutOfRangeException(nameof(state));
            }

            #endregion
        }
示例#2
0
        protected static Microsoft.EntityFrameworkCore.EntityState GetEntityState(IDTPDomainModel.EntityState entityState)
        {
            Microsoft.EntityFrameworkCore.EntityState orientation = entityState switch
            {
                IDTPDomainModel.EntityState.Unchanged => Microsoft.EntityFrameworkCore.EntityState.Unchanged,
                IDTPDomainModel.EntityState.Added => Microsoft.EntityFrameworkCore.EntityState.Added,
                IDTPDomainModel.EntityState.Modified => Microsoft.EntityFrameworkCore.EntityState.Modified,
                IDTPDomainModel.EntityState.Deleted => Microsoft.EntityFrameworkCore.EntityState.Deleted,
                _ => Microsoft.EntityFrameworkCore.EntityState.Detached,
            };

            //switch (entityState)
            //{
            //    case IDTPDomainModel.EntityState.Unchanged:
            //        return Microsoft.EntityFrameworkCore.EntityState.Unchanged;
            //    case IDTPDomainModel.EntityState.Added:
            //        return Microsoft.EntityFrameworkCore.EntityState.Added;
            //    case IDTPDomainModel.EntityState.Modified:
            //        return Microsoft.EntityFrameworkCore.EntityState.Modified;
            //    case IDTPDomainModel.EntityState.Deleted:
            //        return Microsoft.EntityFrameworkCore.EntityState.Deleted;
            //    default:
            //        return Microsoft.EntityFrameworkCore.EntityState.Detached;
            //}
            return(orientation);
        }
示例#3
0
        private void MarkEntryAndOwnedChildren(EntityEntry entry, Microsoft.EntityFrameworkCore.EntityState state)
        {
            entry.State = state;

            // Handle owned entities - ( complex types).
            var ownedNavs = entry.Navigations.Where(n => n.Metadata.GetTargetType().IsOwned());

            ownedNavs.ToList().ForEach(n => {
                var nEntry   = GetEntityEntry(n.CurrentValue);
                nEntry.State = state;
            });
        }
示例#4
0
 public static void LoanGraphStateShouldBe(this DbContext context, LoanBase loan, Microsoft.EntityFrameworkCore.EntityState state)
 {
     context.StateShouldBe(loan, state);
     context.StateShouldBe(loan.Lender, state);
     context.StateShouldBe(loan.LenderContact, state);
 }
示例#5
0
 public static void StateShouldBe(this DbContext context, object obj, Microsoft.EntityFrameworkCore.EntityState state)
 {
     context.Entry(obj).State.ShouldBe(state);
 }
        /// <summary>
        /// Changes the state of an entity object when requested state differs.
        /// </summary>
        /// <typeparam name="TEntity">Type of entity</typeparam>
        /// <param name="entity">The entity instance</param>
        /// <param name="requestedState">The requested new state</param>
        /// <returns><c>true</c> if the state has been changed, <c>false</c> if current state did not differ from <paramref name="requestedState"/>.</returns>
        public static bool TryChangeState <TEntity>(this HookingDbContext ctx, TEntity entity, EfState requestedState) where TEntity : BaseEntity
        {
            var detectChanges = ctx.ChangeTracker.AutoDetectChangesEnabled;

            ctx.ChangeTracker.AutoDetectChangesEnabled = false;

            using (new ActionDisposable(() => ctx.ChangeTracker.AutoDetectChangesEnabled = detectChanges))
            {
                // (perf) turning off autoDetectChanges prevents that ctx.Entry() performs change detection internally.
                var entry = ctx.Entry(entity);
                return(entry.TryChangeState(requestedState));
            }
        }
示例#7
0
        /// <summary>
        /// Changes the state of an entity object when requested state differs.
        /// </summary>
        /// <typeparam name="TEntity">Type of entity</typeparam>
        /// <param name="entity">The entity instance</param>
        /// <param name="requestedState">The requested new state</param>
        /// <returns><c>true</c> if the state has been changed, <c>false</c> if current state did not differ from <paramref name="requestedState"/>.</returns>
        public static bool TryChangeState <TEntity>(this HookingDbContext ctx, TEntity entity, EfState requestedState) where TEntity : BaseEntity
        {
            //Console.WriteLine("ChangeState ORIGINAL");
            var entry = ctx.Entry(entity);

            if (entry.State != requestedState)
            {
                // Only change state when requested state differs,
                // because EF internally sets all properties to modified
                // if necessary, even when requested state equals current state.
                entry.State = requestedState;

                return(true);
            }

            return(false);
        }
示例#8
0
 public void SetRootEntityState(T entity, State state)
 {
     _context.Entry(entity).State = state;
 }
        private EntityState MapToInternal(EfEntityState state)
        {
            var internalState = (EntityState)Enum.Parse(typeof(EntityState), state.ToString());

            return(internalState);
        }