Esempio n. 1
0
 protected override IEnumerable <ConstraintInfo> GetForeignReferences(TableAttribute table)
 {
     using (_connection = OpenConnection())
     {
         lock (_connection)
         {
             _transaction = null;
             var cmd = @"SELECT p.name as TableName, ps.name as TableSchema, fk.name as ConstraintName, cc.name as TargetColumn, pc.name as SourceColumn
                         FROM sys.foreign_key_columns AS r
                         INNER JOIN sys.tables AS c ON c.object_id = r.referenced_object_id
                         INNER JOIN sys.schemas AS cs ON cs.schema_id = c.schema_id
                         INNER JOIN sys.objects AS fk ON fk.object_id = r.constraint_object_id
                         INNER JOIN sys.tables AS p ON p.object_id = r.parent_object_id
                         INNER JOIN sys.schemas AS ps ON ps.schema_id = p.schema_id
                         INNER JOIN sys.columns AS cc ON cc.column_id = r.referenced_column_id AND cc.object_id = c.object_id
                         INNER JOIN sys.columns AS pc ON pc.column_id = r.parent_column_id AND pc.object_id = p.object_id
                         WHERE c.name = @tableName and cs.name = @tableSchema";
             if (!ColumnMapper.ContainsKey(typeof(ConstraintInfo)))
             {
                 ColumnMapper.Map <ConstraintInfo>();
             }
             return((IEnumerable <ConstraintInfo>)ExecuteQueryInner(typeof(ConstraintInfo), cmd,
                                                                    new[]
             {
                 new SqlParameter("@tableName", table.Name),
                 new SqlParameter("@tableSchema", table.Schema)
             }));
         }
     }
 }
Esempio n. 2
0
        public void Init(ColumnMapper columnMapper, Type baseType)
        {
            var otherColumns = columnMapper.Map(TargetType);
            var reference    = otherColumns.FirstOrDefault(c => c.ReferenceTable != null && c.ReferenceTable.BaseType == baseType);

            if (reference != null)
            {
                //1-to-many
            }
            else
            {
                //many-to-many, auto cross reference table needed
                //collection.AddCrossTable();
            }
        }
Esempio n. 3
0
        protected override IEnumerable <ConstraintInfo> GetForeignReferences(TableAttribute table)
        {
            var cmd = string.Format(@"SELECT p.name as TableName, ps.name as TableSchema, fk.name as ConstraintName, cc.name as TargetColumn, pc.name as SourceColumn
                                    FROM sys.foreign_key_columns AS r
                                    INNER JOIN sys.tables AS c ON c.object_id = r.referenced_object_id
                                    INNER JOIN sys.schemas AS cs ON cs.schema_id = c.schema_id
                                    INNER JOIN sys.objects AS fk ON fk.object_id = r.constraint_object_id
                                    INNER JOIN sys.tables AS p ON p.object_id = r.parent_object_id
                                    INNER JOIN sys.schemas AS ps ON ps.schema_id = p.schema_id
                                    INNER JOIN sys.columns AS cc ON cc.column_id = r.referenced_column_id AND cc.object_id = c.object_id
                                    INNER JOIN sys.columns AS pc ON pc.column_id = r.parent_column_id AND pc.object_id = p.object_id
                                    WHERE c.name = '{0}' and cs.name = '{1}'", table.Name, table.Schema);

            if (!ColumnMapper.ContainsKey(typeof(ConstraintInfo)))
            {
                ColumnMapper.Map <ConstraintInfo>();
            }
            return(ExecuteQuery <ConstraintInfo>(cmd));
        }