示例#1
0
        /// <summary>
        /// Returns an instance that contains the original state of the entity.
        /// </summary>
        /// <param name="entity">The entity whose original state is to be returned.</param>
        /// <returns>A ALinq.Table&lt;TEntity&gt; instance in its original state.</returns>
        public TEntity GetOriginalEntityState(TEntity entity)
        {
            if (entity == null)
            {
                throw Error.ArgumentNull("entity");
            }
            MetaType metaType = Context.Mapping.GetMetaType(entity.GetType());

            if ((metaType == null) || !metaType.IsEntity)
            {
                throw Error.EntityIsTheWrongType();
            }
            TrackedObject trackedObject = Context.Services.ChangeTracker.GetTrackedObject(entity);

            if (trackedObject == null)
            {
                return(default(TEntity));
            }
            if (trackedObject.Original != null)
            {
                return((TEntity)trackedObject.CreateDataCopy(trackedObject.Original));
            }
            return((TEntity)trackedObject.CreateDataCopy(trackedObject.Current));
        }
示例#2
0
            private static Expression GetDeleteCommand(TrackedObject tracked)
            {
                MetaType            type            = tracked.Type;
                MetaType            inheritanceRoot = type.InheritanceRoot;
                ParameterExpression expression      = Expression.Parameter(inheritanceRoot.Type, "p");
                Expression          serverItem      = expression;

                if (type != inheritanceRoot)
                {
                    serverItem = Expression.Convert(expression, type.Type);
                }
                object     obj2        = tracked.CreateDataCopy(tracked.Original);
                Expression updateCheck = GetUpdateCheck(serverItem, tracked);

                if (updateCheck != null)
                {
                    updateCheck = Expression.Lambda(updateCheck, new[] { expression });
                    return(Expression.Call(typeof(DataManipulation), "Delete", new[] { inheritanceRoot.Type },
                                           new[] { Expression.Constant(obj2), updateCheck }));
                }
                return(Expression.Call(typeof(DataManipulation), "Delete", new[] { inheritanceRoot.Type },
                                       new Expression[] { Expression.Constant(obj2) }));
            }
示例#3
0
 // Methods
 internal ObjectChangeConflict(ChangeConflictSession session, TrackedObject trackedObject)
 {
     this.session       = session;
     this.trackedObject = trackedObject;
     original           = trackedObject.CreateDataCopy(trackedObject.Original);
 }