示例#1
0
        /// <summary>
        /// 在查询对象中查找或者创建指定引用属性对应的连接表对象。
        /// </summary>
        /// <param name="ownerTable">引用属性对应外键所在的表。</param>
        /// <param name="refProperty">指定的引用属性。</param>
        /// <returns></returns>
        internal ITableSource FindOrCreateJoinTable(ITableSource ownerTable, IRefEntityProperty refProperty)
        {
            var query          = this as IQuery;
            var refTableSource = _allJoinTables.FirstOrDefault(
                ts => ts.OwnerTable == ownerTable && ts.Property == refProperty
                );

            if (refTableSource == null)
            {
                var f = QueryFactory.Instance;

                var refEntityType = refProperty.RefEntityType;
                var refRepo       = RepositoryFactoryHost.Factory.FindByEntity(refEntityType);
                var refTable      = f.Table(refRepo, this.NextJoinTableAlias());

                var joinType = refProperty.Nullable ? JoinType.LeftOuter : JoinType.Inner;
                query.From = f.Join(query.From, refTable, f.Constraint(
                                        ownerTable.Column(refProperty.RefIdProperty),
                                        refTable.Column(Entity.IdProperty)
                                        ), joinType);

                refTableSource = new SqlTableSource
                {
                    OwnerTable = ownerTable,
                    Property   = refProperty,
                    RefTable   = refTable,
                };
                _allJoinTables.Add(refTableSource);
            }

            return(refTableSource.RefTable);
        }
示例#2
0
        private SqlTableSource AddJoinTable(ITableSource fkTable, IRefProperty parentRef, ITableSource pkTable, ITableSource joinTo)
        {
            var f = QueryFactory.Instance;

            var joinType = parentRef.Nullable ? JoinType.LeftOuter : JoinType.Inner;
            var query    = this as IQuery;

            query.From = f.Join(query.From, joinTo, f.Constraint(
                                    fkTable.Column(parentRef.RefIdProperty),
                                    pkTable.IdColumn
                                    ), joinType);

            var refTableSource = new SqlTableSource
            {
                ForeignKeyTable = fkTable,
                RefProperty     = parentRef,
                PrimaryKeyTable = pkTable,
            };

            _allJoinTables.Add(refTableSource);

            return(refTableSource);
        }
示例#3
0
        private SqlTableSource AddJoinTable(ITableSource fkTable, IRefProperty parentRef, ITableSource pkTable, ITableSource joinTo)
        {
            var f = QueryFactory.Instance;

            var joinType = parentRef.Nullable ? JoinType.LeftOuter : JoinType.Inner;
            var query = this as IQuery;
            query.From = f.Join(query.From, joinTo, f.Constraint(
                fkTable.Column(parentRef.RefIdProperty),
                pkTable.IdColumn
                ), joinType);

            var refTableSource = new SqlTableSource
            {
                ForeignKeyTable = fkTable,
                RefProperty = parentRef,
                PrimaryKeyTable = pkTable,
            };
            _allJoinTables.Add(refTableSource);

            return refTableSource;
        }