Ejemplo n.º 1
0
 public Table(Type memberType, JoinType joinType)
 {
     EntityType = memberType;
     Name = memberType.GetTableName();
     JoinType = joinType;
     Columns = MapRepository.Instance.GetColumns(memberType);
 }
Ejemplo n.º 2
0
        public static void CreateTableForType(Type type, bool recreate)
        {
            var ret = "";
            var tableName = type.GetTableName();

            if (recreate && ExistTable(tableName))
            {
                DropTable(tableName);
            }

            string identityField = type.GetIdentityName();

            ret += "CREATE TABLE [" + tableName + "] (\n";
            ret += "[" + identityField + "] [int] IDENTITY(1,1) NOT NULL,\n";

            foreach (PropertyInfo pi in type.GetProperties().Where(pi => pi.CanWrite))
            {
                if (pi.IsIdentityField())
                    continue;
                var mta = pi.GetCustomAttributes(typeof (MappedFieldAttribute), true).FirstOrDefault() as MappedFieldAttribute;
                if (mta == null  )
                    continue;
                if (mta.Computed)
                    continue;
                var columnName = pi.GetColumnName();

                string dbType = pi.GetDbType();

                ret += "[" + columnName + "] " + dbType + ",\n";

            }

            ret += "CONSTRAINT [PK_" + tableName + "] PRIMARY KEY CLUSTERED (\n";
            ret += "\t[" + identityField + "] ASC\n)";

            foreach (PropertyInfo pi in type.GetProperties().Where(pi => pi.IsUnique()))
            {
                var columnName = pi.GetColumnName();
                ret += ", CONSTRAINT [Unique_" + tableName + "_" + columnName + "] UNIQUE NONCLUSTERED  (\n";
                ret += "\t[" + columnName + "] ASC\n)";
            }

            ret += "\n)";

            DataHelper.NonQuery(ret, CommandType.Text);
        }
Ejemplo n.º 3
0
        private static void UpdateTableColumns(Type type)
        {
            var tableName = type.GetTableName();
            var dt = DataHelper.QueryToDataTable("SELECT * FROM [" + tableName + "]", CommandType.Text);

            new List<PropertyInfo>();
            foreach (var pi in type.GetProperties().Where(x => x.GetCustomAttributes(typeof(MappedFieldAttribute), true).Any() && x.CanWrite))
            {

                var columnName = pi.GetColumnName();
                var columnType = pi.GetDbType();

                if (dt.Columns.Contains(columnName))
                    continue;

                var alterCommand = "ALTER TABLE [" + tableName + "] ADD [" + columnName + "] " + columnType;

                DataHelper.NonQuery(alterCommand, CommandType.Text);

            }
        }
Ejemplo n.º 4
0
        private static void UpdateForeignKeys(Type type)
        {
            foreach (PropertyInfo pi in type.GetProperties().Where(pi => pi.GetReferencedType() != null))
            {
                var type2 = pi.GetReferencedType();

                var foreignKeyName = "dbo.FK_" + type.GetTableName() + "_" + type2.GetTableName();
                var dropQuery = @"
                IF EXISTS (SELECT *
                          FROM sys.foreign_keys
                           WHERE name = '" + foreignKeyName + @"'
                           AND parent_object_id = OBJECT_ID(N'dbo." + type.GetTableName() + @"')
                        )
                          ALTER TABLE [" + type.GetTableName() + "] DROP CONSTRAINT [" + foreignKeyName + @"]
                ";
                DataHelper.NonQuery(dropQuery, CommandType.Text);

                var createQuery = @"ALTER TABLE [dbo].[" + type.GetTableName() + @"]
                          WITH CHECK ADD CONSTRAINT [" + foreignKeyName + @"] FOREIGN KEY([" + pi.GetColumnName() + @"])
                            REFERENCES [dbo].[" + type2.GetTableName() + @"] ([" + type2.GetIdentityName() + @"])";

                DataHelper.NonQuery(createQuery, CommandType.Text);
            }
        }
Ejemplo n.º 5
0
        private static void UpdateComputedFields(Type type)
        {
            var tableName = type.GetTableName();

            foreach (var pi in type.GetProperties().Where(x => x.GetCustomAttributes(typeof(MappedFieldAttribute), true).Any() && x.CanWrite))
            {
                var mta = pi.GetCustomAttributes(typeof(MappedFieldAttribute), true).FirstOrDefault() as MappedFieldAttribute;
                if (mta == null)
                    throw new NullReferenceException("Property '" + pi.Name + "' in class '" + type.Name + "' has no MappedField attribute..");

                if (!mta.Computed || string.IsNullOrEmpty(mta.ComputedFormula)) continue;
                var columnName = pi.GetColumnName();

                var dropCommand = "ALTER TABLE [" + tableName + "] DROP COLUMN [" + columnName + "] " ;
                DataHelper.NonQuery(dropCommand, CommandType.Text);

                var alterCommand = "ALTER TABLE [" + tableName + "] ADD [" + columnName + "] AS " + mta.ComputedFormula;
                DataHelper.NonQuery(alterCommand, CommandType.Text);
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// 获取表名
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 public static string GetTableName(Type type)
 {
     return _tableNameCache.Get(type, () => type.GetTableName());
 }
Ejemplo n.º 7
0
 /// <summary>
 /// 获取所有列名
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 public static Tuple<string, string[]> GetColumns(Type type, string connectionStringName)
 {
     return _typeColumnsCache.Get(type, () =>
     {
         if (!type.IsTable())
         {
             throw new ArgumentException("不是映射实体", "type");
         }
         return new Tuple<string, string[]>(type.GetTableName(), type.GetTableColumnNames().ToArray());
     });
 }
Ejemplo n.º 8
0
		static string getForeignKeyName(Type referencingType, Type referencedType)
		{
			return string.Format("FK_{0}_{1}", referencingType.GetTableName(), referencedType.GetTableName());
		}