/// <summary> /// Gets the property database information. /// </summary> /// <param name="entityType"> /// Type of the entity. /// </param> /// <param name="propertyPath"> /// The property path. /// </param> /// <returns> /// A <see cref="DbInfoDto"/> /// </returns> public DbInfoDto GetPropertyDatabaseInformation(Type entityType, string propertyPath) { Check.IsNotNull(entityType, "entityType is required."); Check.IsNotNullOrWhitespace(propertyPath, "propertyPath cannot be empty or whitespace."); var classMapping = _sessionFactory.GetClassMetadata(entityType); var persister = classMapping as AbstractEntityPersister; var dbInfo = new DbInfoDto(); if (persister != null) { dbInfo.Table = persister.TableName; dbInfo.Column = string.Join(",", persister.GetPropertyColumnNames(propertyPath)); dbInfo.DataType = persister.GetPropertyType(propertyPath).Name; } return(dbInfo); }
/// <summary> /// Gets the property chain database information. /// </summary> /// <param name="entityType"> /// Type of the entity. /// </param> /// <param name="memberChain"> /// The member chain. /// </param> /// <returns> /// A <see cref="DbInfoDto"/> /// </returns> public DbInfoDto GetPropertyChainDatabaseInformation(Type entityType, IEnumerable <MemberInfo> memberChain) { Check.IsNotNull(entityType, "entityType is required."); var dbInfo = new DbInfoDto(); var reversedMemberChainList = memberChain.ToList(); reversedMemberChainList.Reverse(); string propertyPath = null; foreach (var memberInfo in reversedMemberChainList) { if (propertyPath == null) { propertyPath = memberInfo.Name; } else { propertyPath = memberInfo.Name + "." + propertyPath; } var parentType = memberInfo.DeclaringType; if (typeof(IAggregateRoot).IsAssignableFrom(parentType) || typeof(IAggregateNode).IsAssignableFrom(parentType)) { dbInfo = GetPropertyDatabaseInformation(parentType, propertyPath); break; } if (!(parentType.GetCustomAttributes(typeof(ComponentAttribute), false).Count() > 0)) { throw new ArgumentException("Member Chain for mapping contains an invalid member."); } } return(dbInfo); }