private bool CompareReferenceProperty <T>(PropertyInfo p, T a, T b)
        {
            if (!typeof(IdentifiableBase).IsAssignableFrom(p.PropertyType))
            {
                return(false);
            }
            IdentifiableBase va = (IdentifiableBase)p.GetValue(a, null);
            IdentifiableBase vb = (IdentifiableBase)p.GetValue(b, null);

            if (va == null && vb == null)
            {
                return(false);
            }
            if (!(va.UserIds.Any() && vb.UserIds.Any()))
            {
                return(false);
            }
            return(va.UserIds.First().Identifier != vb.UserIds.First().Identifier);
        }
        private void UpdateReferenceProperty <T>(PropertyInfo p, T a, T b)
        {
            if (!typeof(IdentifiableBase).IsAssignableFrom(p.PropertyType))
            {
                return;
            }
            IdentifiableBase vb = (IdentifiableBase)p.GetValue(b, null);

            if (vb == null)
            {
                return;
            }
            if (!(vb.UserIds.Any()))
            {
                return;
            }
            var          tmp   = repoSet.Where(x => x.UserIds.Count > 0).ToList();
            IVersionable found = tmp.FirstOrDefault(x => x.UserIds[0].Identifier == vb.UserIds[0].Identifier);

            p.SetValue(a, found, null);
        }