mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
AggregateRootRepository
This commit is contained in:
parent
4b0b0da643
commit
5d12e1c436
@ -69,7 +69,8 @@ namespace FreeSql
|
|||||||
if (col.Attribute.IsVersion) continue;
|
if (col.Attribute.IsVersion) continue;
|
||||||
var propvalBefore = table.GetPropertyValue(entityBefore, col.CsName);
|
var propvalBefore = table.GetPropertyValue(entityBefore, col.CsName);
|
||||||
var propvalAfter = table.GetPropertyValue(entityAfter, col.CsName);
|
var propvalAfter = table.GetPropertyValue(entityAfter, col.CsName);
|
||||||
if (object.Equals(propvalBefore, propvalAfter) == false) changes.Add(col.CsName);
|
//if (object.Equals(propvalBefore, propvalAfter) == false) changes.Add(col.CsName);
|
||||||
|
if (CompareEntityPropertyValue(col.CsType, propvalBefore, propvalAfter) == false) changes.Add(col.CsName);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -190,11 +191,33 @@ namespace FreeSql
|
|||||||
if (type.IsNumberType() ||
|
if (type.IsNumberType() ||
|
||||||
_dicCompareEntityPropertyValue.ContainsKey(type) ||
|
_dicCompareEntityPropertyValue.ContainsKey(type) ||
|
||||||
type.IsEnum ||
|
type.IsEnum ||
|
||||||
type.NullableTypeOrThis().IsEnum ||
|
type.IsValueType ||
|
||||||
type.FullName.StartsWith("System.") ||
|
type.NullableTypeOrThis().IsEnum) return object.Equals(propvalBefore, propvalAfter);
|
||||||
type.IsValueType) return object.Equals(propvalBefore, propvalAfter);
|
|
||||||
if (propvalBefore == null && propvalAfter != null) return false;
|
if (propvalBefore == null && propvalAfter != null) return false;
|
||||||
if (propvalBefore != null && propvalAfter == null) return false;
|
if (propvalBefore != null && propvalAfter == null) return false;
|
||||||
|
|
||||||
|
if (FreeSql.Internal.Utils.dicExecuteArrayRowReadClassOrTuple.ContainsKey(type)) {
|
||||||
|
if (type.FullName.StartsWith("Newtonsoft."))
|
||||||
|
return object.Equals(propvalBefore.ToString(), propvalAfter.ToString());
|
||||||
|
|
||||||
|
if (typeof(IDictionary).IsAssignableFrom(type))
|
||||||
|
{
|
||||||
|
var dictBefore = (propvalBefore as IDictionary);
|
||||||
|
var dictAfter = (propvalAfter as IDictionary);
|
||||||
|
if (dictBefore.Count != dictAfter.Count) return false;
|
||||||
|
foreach (var key in dictBefore.Keys)
|
||||||
|
{
|
||||||
|
if (dictAfter.Contains(key) == false) return false;
|
||||||
|
var valBefore = dictBefore[key];
|
||||||
|
var valAfter = dictAfter[key];
|
||||||
|
if (valBefore == null && valAfter == null) continue;
|
||||||
|
if (valBefore == null && valAfter != null) return false;
|
||||||
|
if (valBefore != null && valAfter == null) return false;
|
||||||
|
if (CompareEntityPropertyValue(valBefore.GetType(), valBefore, valAfter) == false) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (type.IsArrayOrList())
|
if (type.IsArrayOrList())
|
||||||
{
|
{
|
||||||
var enumableBefore = propvalBefore as IEnumerable;
|
var enumableBefore = propvalBefore as IEnumerable;
|
||||||
@ -206,7 +229,7 @@ namespace FreeSql
|
|||||||
var moveNextBefore = itorBefore.MoveNext();
|
var moveNextBefore = itorBefore.MoveNext();
|
||||||
var moveNextAfter = itorAfter.MoveNext();
|
var moveNextAfter = itorAfter.MoveNext();
|
||||||
if (moveNextBefore != moveNextAfter) return false;
|
if (moveNextBefore != moveNextAfter) return false;
|
||||||
if (moveNextBefore == false) return true;
|
if (moveNextBefore == false) break;
|
||||||
var currentBefore = itorBefore.Current;
|
var currentBefore = itorBefore.Current;
|
||||||
var currentAfter = itorAfter.Current;
|
var currentAfter = itorAfter.Current;
|
||||||
if (currentBefore == null && enumableAfter == null) continue;
|
if (currentBefore == null && enumableAfter == null) continue;
|
||||||
@ -214,8 +237,15 @@ namespace FreeSql
|
|||||||
if (currentBefore != null && currentAfter == null) return false;
|
if (currentBefore != null && currentAfter == null) return false;
|
||||||
if (CompareEntityPropertyValue(currentBefore.GetType(), currentBefore, currentAfter) == false) return false;
|
if (CompareEntityPropertyValue(currentBefore.GetType(), currentBefore, currentAfter) == false) return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
if (type.IsClass || type.IsInterface)
|
|
||||||
|
if (type.FullName.StartsWith("System.") ||
|
||||||
|
type.FullName.StartsWith("Npgsql.") ||
|
||||||
|
type.FullName.StartsWith("NetTopologySuite."))
|
||||||
|
return object.Equals(propvalBefore, propvalAfter);
|
||||||
|
|
||||||
|
if (type.IsClass)
|
||||||
{
|
{
|
||||||
foreach (var prop in type.GetProperties())
|
foreach (var prop in type.GetProperties())
|
||||||
{
|
{
|
||||||
@ -225,6 +255,7 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return object.Equals(propvalBefore, propvalAfter);
|
return object.Equals(propvalBefore, propvalAfter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user