Example #1
0
        /// <summary>
        /// Возвращает только изменения конкретных полей объектов
        /// </summary>
        public static IList <FieldChange> GetFieldChanges <T>(IUnitOfWork uow, int[] entitiesIds, Expression <Func <T, object> > field)
            where T : IDomainObject
        {
            ChangedEntity changedEntityAlias = null;
            var           prop = Gamma.Utilities.PropertyUtil.GetName(field);

            var changes = uow.Session.QueryOver <FieldChange>()
                          .Left.JoinAlias(fc => fc.Entity, () => changedEntityAlias)
                          .Where(() => changedEntityAlias.EntityClassName == typeof(T).Name)
                          .Where(() => changedEntityAlias.EntityId.IsIn(entitiesIds))
                          .Where(fc => fc.Path == prop)
                          .List();

            return(changes);
        }
Example #2
0
        public void OnPostDelete(PostDeleteEvent deleteEvent)
        {
            var entity = deleteEvent.Entity as IDomainObject;

            var type = NHibernateProxyHelper.GuessClass(entity);

            if (!TrackerMain.Factory?.NeedTrace(type) ?? false)
            {
                return;
            }

            if (changes.Exists(di => di.Operation == EntityChangeOperation.Delete && di.EntityClassName == type.Name && di.EntityId == entity.Id))
            {
                return;
            }

            var hce = new ChangedEntity(EntityChangeOperation.Delete, entity, new List <FieldChange>());

            changes.Add(hce);
        }