Fixed infinite loop problem in IsDirty and IsValid

This commit is contained in:
Rich
2009-04-16 14:33:10 +00:00
parent 202b79e5a8
commit adabca0068
90 changed files with 2222 additions and 94 deletions

View File

@@ -16,6 +16,7 @@ using Csla.Data;
using System.Configuration;
using System.IO;
using System.ComponentModel;
using System.Collections.Generic;
using Csla.Validation;
namespace VEPROMS.CSLA.Library
{
@@ -284,11 +285,30 @@ namespace VEPROMS.CSLA.Library
//}
public override bool IsDirty
{
get { return base.IsDirty || (_MyGroup == null ? false : _MyGroup.IsDirty); }
get
{
if ( base.IsDirty )
return true;
return IsDirtyList(new List<object>());
}
}
public bool IsDirtyList(List<object> list)
{
if (base.IsDirty || list.Contains(this))
return base.IsDirty;
list.Add(this);
return base.IsDirty || (_MyGroup == null ? false : _MyGroup.IsDirtyList(list));
}
public override bool IsValid
{
get { return (IsNew && !IsDirty ? true : base.IsValid) && (_MyGroup == null ? true : _MyGroup.IsValid); }
get { return IsValidList(new List<object>()); }
}
public bool IsValidList(List<object> list)
{
if(list.Contains(this))
return (IsNew && !IsDirty) ? true : base.IsValid;
list.Add(this);
return ((IsNew && !IsDirty) ? true : base.IsValid) && (_MyGroup == null ? true : _MyGroup.IsValid);
}
#endregion
#region ValidationRules