/// <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<TEntity> 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)); }
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) })); }
// Methods internal ObjectChangeConflict(ChangeConflictSession session, TrackedObject trackedObject) { this.session = session; this.trackedObject = trackedObject; original = trackedObject.CreateDataCopy(trackedObject.Original); }