예제 #1
0
 internal RdbColumnInfo(
     string name,
     EntityPropertyMeta propertyMeta,
     ColumnMeta columnMeta,
     RdbTableInfo table,
     DbType dbType
     )
 {
     this.Table        = table;
     this.Name         = name;
     this.Meta         = columnMeta;
     this.PropertyType = TypeHelper.IgnoreNullable(propertyMeta.PropertyType);
     this.DbType       = dbType;
     this.Property     = propertyMeta.ManagedProperty as IProperty;
 }
예제 #2
0
        internal static IRdbTableInfo CreateTableInfo(EntityMeta em, string dbProvider)
        {
            if (em.TableMeta == null)
            {
                throw new ORMException(string.Format("类型 {0} 没有映射数据库,无法为其创造 ORM 运行时对象。", em.EntityType.FullName));
            }

            var identifierProvider = DbMigrationProviderFactory.GetIdentifierProvider(dbProvider);
            var dbTypeConverter    = DbMigrationProviderFactory.GetDbTypeConverter(dbProvider);

            var name = identifierProvider.Prepare(em.TableMeta.TableName);
            var res  = new RdbTableInfo(name, em.EntityType);

            ProcessManagedProperties(res, em, identifierProvider, dbTypeConverter);

            return(res);
        }
예제 #3
0
        private static void ProcessManagedProperties(
            RdbTableInfo table,
            EntityMeta em,
            IDbIdentifierQuoter identifierProvider,
            DbTypeConverter dbTypeConverter
            )
        {
            foreach (var property in em.EntityProperties)
            {
                var columnMeta = property.ColumnMeta;
                if (columnMeta == null)
                {
                    continue;
                }

                var propertyName = property.Name;

                var epm = em.Property(propertyName);
                if (epm == null)
                {
                    throw new ArgumentNullException(string.Format("{0}.{1} 属性需要使用托管属性进行编写。", em.EntityType.FullName, propertyName));
                }

                var columnName = identifierProvider.Prepare(columnMeta.ColumnName);

                var dbType = columnMeta.DbType ?? dbTypeConverter.FromClrType(epm.PropertyType);;
                var column = new RdbColumnInfo(columnName, epm, columnMeta, table, dbType);

                if (columnMeta.IsPrimaryKey)
                {
                    table.PKColumn = column;
                }

                table.Columns.Add(column);
            }
        }