コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }