Example #1
0
        public bool AddRelations(Guid tenantId, string relationEntityName, string parentEntityName, Guid parentId, string childEntityName, List <Guid> childIds)
        {
            IMetadataManager _metadaManager = new VPC.Framework.Business.MetadataManager.Contracts.MetadataManager();

            var tableName  = _metadaManager.GetTableNameByEntityname(relationEntityName);
            var primaryKey = _metadaManager.GetPrimaryKeyByEntityname(relationEntityName);

            var fields = _metadaManager.GetColumnNameByEntityName(relationEntityName, null);

            if (fields.Any())
            {
                var parentTableName = _metadaManager.GetTableNameByEntityname(parentEntityName);
                var parentField     = fields.FirstOrDefault(t => t.ReferenceTableName.Equals(parentTableName));

                var childTableName = _metadaManager.GetTableNameByEntityname(childEntityName);
                var childField     = fields.FirstOrDefault(t => t.ReferenceTableName.Equals(childTableName));

                //delete and create....
                var queryBuilder = new DeleteQueryBuilder();
                queryBuilder.SelectFromTable(tableName);
                queryBuilder.AddWhere(parentField.ColumnName, Comparison.Equals, parentId.ToString(), 1);
                var deleteQuery = queryBuilder.BuildQuery();
                //----------------------------------------------------------------------------------------
                IRelationQueryAdmin deleteAdmin = new RelationQueryAdmin();
                var res = deleteAdmin.DeleteResult(tenantId, relationEntityName, deleteQuery);

                //need to change this logic....
                foreach (var childId in childIds)
                {
                    var insertQueryBuilder = new InsertQueryBuilder();
                    var insertColumns      = GetNecessaryColumns(tenantId, parentId, fields, parentField);
                    insertColumns.Add(childField.ColumnName, childId.ToString());
                    insertQueryBuilder.InsertIntoTable(tableName, insertColumns, false);
                    var insertQuery = insertQueryBuilder.BuildQuery();
                    IRelationQueryAdmin saveAdmin = new RelationQueryAdmin();
                    saveAdmin.SaveResult(tenantId, relationEntityName, insertQuery);
                }
            }
            return(true);
        }
Example #2
0
        public DataTable GetRelations(Guid tenantId, string entityName, Guid id, string relationEntityName, string intersectFieldName, string intersectClassName)
        {
            IMetadataManager _metadaManager = new VPC.Framework.Business.MetadataManager.Contracts.MetadataManager();

            var tableName  = _metadaManager.GetTableNameByEntityname(relationEntityName);
            var primaryKey = _metadaManager.GetPrimaryKeyByEntityname(relationEntityName);

            var fields = _metadaManager.GetColumnNameByEntityName(relationEntityName, null);

            if (fields.Any())
            {
                IRelationQueryAdmin admin = new RelationQueryAdmin();

                var parentTableName = _metadaManager.GetTableNameByEntityname(entityName);
                var parentField     = fields.FirstOrDefault(t => t.ReferenceTableName.Equals(parentTableName));
                if (parentField == null)
                {
                    return(null);
                }

                //
                var childField = fields.FirstOrDefault(t => t.FieldName.Equals(intersectFieldName));
                if (childField == null)
                {
                    return(null);
                }
                var childTableName       = childField.ReferenceTableName;
                var childTablePrimaryKey = childField.ReferenceColumnName;

                var intersectContext = _metadaManager.GetEntityContextByEntityName(intersectClassName, false);
                var itemTableColumns = ItemHelper.GetItemSelectDetails(tenantId, intersectContext, 0);


                var selectQueryBuilder = new SelectQueryBuilder();
                selectQueryBuilder.SelectFromTable(tableName, fields[0].EntityPrefix);

                selectQueryBuilder.AddJoin(JoinType.InnerJoin, childTableName, "_tt", childTablePrimaryKey, Comparison.Equals, tableName, fields[0].EntityPrefix, childField.ColumnName);

                selectQueryBuilder.AddJoin(JoinType.InnerJoin, itemTableColumns[0].TableName, itemTableColumns[0].EntityPrefix, childTablePrimaryKey, Comparison.Equals, tableName, fields[0].EntityPrefix, childField.ColumnName);

                var queryColumns = new List <string> ();
                var toDict       = new Dictionary <string, string> ();
                foreach (var item in itemTableColumns)
                {
                    //  if(!item.IsIntersectProperties)continue;
                    // var columnName = !string.IsNullOrEmpty (item.ClientName) ? item.ClientName + "." + item.FieldName : item.FieldName;
                    if (item.ColumnName.Equals(item.PrimaryKey) || item.ColumnName.Equals("[Name]"))
                    {
                        queryColumns.Add(item.EntityPrefix + "." + item.ColumnName);
                        toDict.Add(item.EntityPrefix + "." + item.ColumnName, item.FieldName);
                    }
                }
                selectQueryBuilder.SelectColumns(queryColumns.ToArray());
                selectQueryBuilder.SelectColumnsAndAliases(toDict);

                selectQueryBuilder.AddWhere(parentField.ColumnName, Comparison.Equals, id.ToString(), 1);
                var selectQuery = selectQueryBuilder.BuildQuery();

                IRelationReview review = new RelationReview();
                return(review.GetResult(tenantId, tableName, selectQuery));
            }
            return(null);
            //return status;
        }