diff --git a/src/SmartSql/Configuration/Tags/PropertyChangedUtil.cs b/src/SmartSql/Configuration/Tags/PropertyChangedUtil.cs
index bc2d545c..a138e90a 100644
--- a/src/SmartSql/Configuration/Tags/PropertyChangedUtil.cs
+++ b/src/SmartSql/Configuration/Tags/PropertyChangedUtil.cs
@@ -1,7 +1,13 @@
+using System;
+using System.Xml;
+using SmartSql.Exceptions;
+
namespace SmartSql.Configuration.Tags
{
public class PropertyChangedUtil
{
+ private const String PROPERTY_CHANGED = nameof(IPropertyChanged.PropertyChanged);
+
///
/// 验证属性值变更状态是否满足要求
///
@@ -40,5 +46,27 @@ public static bool IsCondition(IPropertyChanged propertyChanged, AbstractRequest
}
}
}
+
+ public static bool? GetPropertyChanged(XmlNode xmlNode, Statement statement)
+ {
+ string strVal = xmlNode.Attributes?[PROPERTY_CHANGED]?.Value?.Trim();
+ if (String.IsNullOrEmpty(strVal))
+ {
+ if (statement.EnablePropertyChangedTrack)
+ {
+ return statement.EnablePropertyChangedTrack;
+ }
+
+ return null;
+ }
+
+ if (!Boolean.TryParse(strVal, out var boolVal))
+ {
+ throw new SmartSqlException($"can not convert {strVal} to Boolean from xml-node:{xmlNode.Value}.");
+ }
+
+ return boolVal;
+
+ }
}
}
\ No newline at end of file
diff --git a/src/SmartSql/Configuration/Tags/TagBuilders/AbstractTagBuilder.cs b/src/SmartSql/Configuration/Tags/TagBuilders/AbstractTagBuilder.cs
index bfb0cfb5..0fbeea23 100644
--- a/src/SmartSql/Configuration/Tags/TagBuilders/AbstractTagBuilder.cs
+++ b/src/SmartSql/Configuration/Tags/TagBuilders/AbstractTagBuilder.cs
@@ -8,7 +8,7 @@ namespace SmartSql.Configuration.Tags.TagBuilders
{
public abstract class AbstractTagBuilder : ITagBuilder
{
- private const String PROPERTY_CHANGED = nameof(IPropertyChanged.PropertyChanged);
+
private const String PREPEND = nameof(Tag.Prepend);
private const String PROPERTY = nameof(Tag.Property);
private const String REQUIRED = nameof(Tag.Required);
@@ -33,32 +33,6 @@ public Decimal GetXmlAttributeValueAsDecimal(XmlNode xmlNode, string attributeNa
return decimalVal;
}
- public bool TryGetXmlAttributeValueAsBool(XmlNode xmlNode, string attributeName, out bool boolVal)
- {
- string strVal = GetXmlAttributeValue(xmlNode, attributeName);
- if (String.IsNullOrEmpty(strVal))
- {
- boolVal = false;
- return false;
- }
-
- if (!Boolean.TryParse(strVal, out boolVal))
- {
- throw new SmartSqlException($"can not convert {strVal} to Boolean from xml-node:{xmlNode.Value}.");
- }
-
- return true;
- }
-
- public bool? GetPropertyChanged(XmlNode xmlNode)
- {
- if (TryGetXmlAttributeValueAsBool(xmlNode, PROPERTY_CHANGED, out var boolVal))
- {
- return boolVal;
- }
- return null;
- }
-
public String GetPrepend(XmlNode xmlNode)
{
return GetXmlAttributeValue(xmlNode, PREPEND);
diff --git a/src/SmartSql/Configuration/Tags/TagBuilders/IsPropertyBuilder.cs b/src/SmartSql/Configuration/Tags/TagBuilders/IsPropertyBuilder.cs
index 7a7d2bdc..7e896ae3 100644
--- a/src/SmartSql/Configuration/Tags/TagBuilders/IsPropertyBuilder.cs
+++ b/src/SmartSql/Configuration/Tags/TagBuilders/IsPropertyBuilder.cs
@@ -9,17 +9,12 @@ public class IsPropertyBuilder : AbstractTagBuilder
{
public override ITag Build(XmlNode xmlNode, Statement statement)
{
- var propertyChanged = GetPropertyChanged(xmlNode);
- if (statement.EnablePropertyChangedTrack && !propertyChanged.HasValue)
- {
- propertyChanged = statement.EnablePropertyChangedTrack;
- }
return new IsProperty
{
Property = GetProperty(xmlNode),
Prepend = GetPrepend(xmlNode),
ChildTags = new List(),
- PropertyChanged = propertyChanged,
+ PropertyChanged = PropertyChangedUtil.GetPropertyChanged(xmlNode, statement),
Statement = statement
};
}