|
@@ -47,27 +47,37 @@ namespace InABox.Core
|
|
|
public virtual bool Synchronise(object Entity)
|
|
|
{
|
|
|
var result = false;
|
|
|
- var props = CoreUtils.PropertyList(GetType(),
|
|
|
- x => (!x.Name.Equals("ID") || Entity == null) && !x.DeclaringType.Equals(typeof(BaseObject)), false);
|
|
|
+ var props = CoreUtils.PropertyList(GetType(), x => (!x.Name.Equals("ID") || Entity == null) && !x.DeclaringType.Equals(typeof(BaseObject)), false);
|
|
|
foreach (var key in props.Keys)
|
|
|
{
|
|
|
if (CoreUtils.HasProperty(Entity.GetType(), key))
|
|
|
{
|
|
|
var prop = CoreUtils.GetProperty(typeof(T), key);
|
|
|
- if (prop != null && prop.PropertyType.Equals(props[key]) && !prop.PropertyType.GetInterfaces().Any(x => x == typeof(IEntityLink)))
|
|
|
+ if (prop != null && prop.PropertyType.Equals(props[key]))
|
|
|
+
|
|
|
{
|
|
|
- var oldvalue = CoreUtils.GetPropertyValue(this, key);
|
|
|
- var newvalue = CoreUtils.GetPropertyValue(Entity, key);
|
|
|
- if ((oldvalue == null && newvalue != null) || (oldvalue != null && !oldvalue.Equals(newvalue)))
|
|
|
+ if (prop.PropertyType.GetInterfaces().Any(x => x == typeof(IEntityLink)))
|
|
|
{
|
|
|
- result = true;
|
|
|
- try
|
|
|
- {
|
|
|
- CoreUtils.SetPropertyValue(this, key, newvalue);
|
|
|
- }
|
|
|
- catch (Exception e)
|
|
|
+ var tgtlink = CoreUtils.GetPropertyValue(this, key) as IEntityLink;
|
|
|
+ var srclink = CoreUtils.GetPropertyValue(Entity, key) as IEntityLink;
|
|
|
+ tgtlink.ID = srclink.ID;
|
|
|
+ tgtlink.Synchronise(srclink);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var oldvalue = CoreUtils.GetPropertyValue(this, key);
|
|
|
+ var newvalue = CoreUtils.GetPropertyValue(Entity, key);
|
|
|
+ if ((oldvalue == null && newvalue != null) || (oldvalue != null && !oldvalue.Equals(newvalue)))
|
|
|
{
|
|
|
- Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
|
|
|
+ result = true;
|
|
|
+ try
|
|
|
+ {
|
|
|
+ CoreUtils.SetPropertyValue(this, key, newvalue);
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|