private static T Get <T>(Node node) where T : class { T entity = LazyLoader.EnableLazyLoading <T>(); //if (node.GetProperty("clazz") != typeof(T).ToString()) if (_reflectionHelper.CanCast(node.GetProperty("clazz"), typeof(T).ToString()) == false) { throw new InvalidCastException(string.Format("Retrieved object with ID '{0}' is an instance of '{1}' and unable to cast it to '{2}'", node.Id.ToString(), node.GetProperty("clazz"), typeof(T).ToString())); } typeof(T).GetProperties().Where(pr => pr.CanRead && MapperHelper.IsAnId(pr) == false).ToList().ForEach(property => { property.SetValue(entity, MapperHelper.CastPropertyValue(property, node.GetProperty(property.Name)), null); }); entity = MapperHelper.SetIdentity <T>(entity, node.Id); return(entity); }
internal Node SaveAndReturnAsNode(object entity) { if (entity == null) { return(null); } int id = MapperHelper.GetIdentity(entity); Node node = null; if (id <= 0) { node = this.CreateNode(entity); node.Create(); MapperHelper.SetIdentity(entity, node.Id); } else { node = Node.Get(id); this.UpdateNode(node, entity); } return(node); }