コード例 #1
0
        private IEnumerable <IEntityChange <TEntity> > detectChanges(EntityState state)
        {
            List <IEntityChange <TEntity> > changes = new List <IEntityChange <TEntity> >();

            foreach (Entity <TEntity> context in lookup.Values)
            {
                if (context.State == EntityState.Added && state.HasFlag(EntityState.Added))
                {
                    IEntityChange <TEntity> change = getEntityChange(context);
                    changes.Add(change);
                }
                else if (context.State == EntityState.Unmodified && (state.HasFlag(EntityState.Modified) || state.HasFlag(EntityState.Unmodified)))
                {
                    IEntityChange <TEntity> change = getEntityChange(context);
                    if (change.GetChanges().Any())
                    {
                        if (state.HasFlag(EntityState.Modified))
                        {
                            changes.Add(change);
                        }
                    }
                    else if (state.HasFlag(EntityState.Unmodified))
                    {
                        changes.Add(change);
                    }
                }
                else if (context.State == EntityState.Removed && state.HasFlag(EntityState.Removed))
                {
                    IEntityChange <TEntity> change = getEntityChange(context);
                    changes.Add(change);
                }
            }
            return(changes);
        }
コード例 #2
0
        public void ShouldSeeChangeToBasePropertyWhenBaseObject()
        {
            var           detector = new DerivedChangeDetector();
            var           tracker  = new EntityChangeTracker <TestEntity>(detector);
            DerivedEntity entity   = new DerivedEntity()
            {
                IntValue = 123
            };

            tracker.Attach(entity);

            entity.IntValue = 234;

            var changes = tracker.DetectChanges();

            Assert.AreEqual(1, changes.Count(), "The wrong number of changes were detected.");
            IEntityChange <TestEntity> change = changes.Single();

            Assert.AreSame(entity, change.Entity, "A change was detected on the wrong entity.");
            Assert.AreEqual(EntityState.Modified, change.State, "The entity should have been modified.");

            Assert.AreEqual(1, change.GetChanges().Count(), "The wrong number of properties were seen as changed.");
            var propertyChange = change.GetChanges().Single();

            Assert.AreEqual(TestEntityChangeDetector.IntDescription, propertyChange.DisplayName, "The wrong property was recorded.");

            bool hasBaseChange = change.HasChange(x => x.IntValue);

            Assert.IsTrue(hasBaseChange, "The change was not detected.");

            bool hasDerivedChange = change.As <DerivedEntity>().HasChange(x => x.IntValue);

            Assert.IsTrue(hasDerivedChange, "The change was not detected.");
        }
コード例 #3
0
ファイル: Session.cs プロジェクト: eakarpov/Web
        /// <summary> Перед сохранением изменённой сущности в базу </summary>
        public override void OnChange(IEntityChange change)
        {
            base.OnChange(change);

            if (change.PropertyChanged("IP"))
            {
                throw new GraphLabsValidationException("IP", ValidationErrors.Session_OnValidating_Нельзя_менять_значение_IP_адреса_);
            }
        }
コード例 #4
0
 public ChangeEntry(
     IEntityChange entity,
     ChangeType changeType,
     IEnumerable <Change> changes)
 {
     EntityId          = entity.EntityId;
     EntityName        = entity.EntityName;
     EntityDescription = entity.EntityDescription;
     ChangeType        = changeType;
     Changes           = changes;
 }
コード例 #5
0
        public void ShouldDetectChangeToDerivedPropertyWhenAdding()
        {
            var           detector = new DerivedChangeDetector();
            var           tracker  = new EntityChangeTracker <TestEntity>(detector);
            DerivedEntity entity   = new DerivedEntity()
            {
                DerivedValue = 123
            };

            tracker.Add(entity);

            var changes = tracker.DetectChanges();

            Assert.AreEqual(1, changes.Count(), "The wrong number of changes were detected.");
            IEntityChange <TestEntity> change = changes.Single();

            Assert.AreSame(entity, change.Entity, "A change was detected on the wrong entity.");
            Assert.AreEqual(EntityState.Added, change.State, "The entity should have been modified.");
            Assert.AreEqual(1, change.GetChanges().Count(), "The wrong number of properties were seen as changed.");
        }
コード例 #6
0
        public void ShouldIncludeChangeToDoubleDerivedProperty()
        {
            var detector = new DoubleDerivedChangeDetector();
            var tracker  = new EntityChangeTracker <TestEntity>(detector);
            DoubleDerivedEntity entity = new DoubleDerivedEntity()
            {
                DoubleDerivedValue = "John"
            };

            tracker.Attach(entity);

            entity.DoubleDerivedValue = "Tom";

            var changes = tracker.DetectChanges();

            Assert.AreEqual(1, changes.Count(), "The wrong number of changes were detected.");
            IEntityChange <TestEntity> change = changes.Single();

            Assert.AreSame(entity, change.Entity, "A change was detected on the wrong entity.");
            Assert.AreEqual(EntityState.Modified, change.State, "The entity should have been modified.");
            Assert.AreEqual(1, change.GetChanges().Count(), "The wrong number of properties were seen as changed.");
        }
コード例 #7
0
 /// <summary> Перед сохранением изменённой сущности в базу </summary>
 public virtual void OnChange(IEntityChange change)
 {
 }
コード例 #8
0
        /// <summary> Перед сохранением изменённой сущности в базу </summary>
        public override void OnChange(IEntityChange change)
        {
            base.OnChange(change);

            LastModificationTime = DateTime.Now;
        }
コード例 #9
0
ファイル: ITrackableEntity.cs プロジェクト: eakarpov/Web
 /// <summary> Перед сохранением изменённой сущности в базу </summary>
 public void OnChange(IEntityChange change)
 {
     Contract.Requires <ArgumentNullException>(change != null);
 }