Esempio n. 1
0
        void AddFields(TableNode tn, NDO.Mapping.Class cl)
        {
            foreach (ColumnNode cn in tn.ColumnNodes)
            {
                if (cn.Column.IsPrimary)
                {
                    NDO.Mapping.ClassOid  oid       = cl.NewOid();
                    NDO.Mapping.OidColumn oidColumn = oid.NewOidColumn();
                    if (cn.Column.AutoIncremented)
                    {
                        oidColumn.AutoIncremented = true;
                    }
                    oidColumn.Name = cn.Column.Name;
                    if (cn.IsMapped)
                    {
                        oidColumn.FieldName = cn.Column.FieldName;
                    }
                }
            }

            foreach (ColumnNode cn in tn.ColumnNodes)
            {
                if (cn.IsMapped)
                {
                    NDO.Mapping.Field field = cl.AddStandardField(cn.Column.FieldName, cn.Column.IsPrimary);
                    field.Column.Name = cn.Column.Name;
                }
            }
        }
Esempio n. 2
0
 void AddRelations(TableNode tn, NDO.Mapping.Class cl)
 {
     foreach (RelationNode rn in tn.RelationNodes)
     {
         Relation rel = rn.Relation;
         // This is for FkRelations, which must exist as entries in the
         // tree in order to delete the relation mapping.
         if (rel.RelationDirection == RelationDirection.DirectedToMe)
         {
             return;
         }
         if (rn.RelatedTableNode.Table.Skipped)
         {
             continue;
         }
         NDO.Mapping.Relation r = cl.AddStandardRelation(rel.FieldName, rn.RelatedTableNode.Table.Namespace + "." + rn.RelatedTableNode.Table.ClassName, rel.IsElement, string.Empty, false, false, null);
         r.RelationName = rel.RelationName;
         ForeignIntermediateTableRelation fitr     = rel as ForeignIntermediateTableRelation;
         NDO.Mapping.ForeignKeyColumn     fkColumn = (NDO.Mapping.ForeignKeyColumn)r.ForeignKeyColumns.First();
         if (fitr == null)
         {
             fkColumn.Name = rn.Text;
         }
         else
         {
             fkColumn.Name = fitr.ForeignKeyColumnName;
             NDO.Mapping.MappingTable mtable = new NDO.Mapping.MappingTable(r);
             r.MappingTable = mtable;
             NDO.Mapping.ForeignKeyColumn cfkColumn = mtable.NewForeignKeyColumn();
             cfkColumn.Name      = fitr.ChildForeignKeyColumnName;
             mtable.ConnectionId = cl.ConnectionId;
             if (((DatabaseNode)tn.Parent).Database.OwnerName != string.Empty)
             {
                 mtable.TableName = ((DatabaseNode)tn.Parent).Database.OwnerName + "." + fitr.TableName;
             }
             else
             {
                 mtable.TableName = fitr.TableName;
             }
         }
     }
 }
Esempio n. 3
0
        public void GenerateCode()
        {
            NDO.Mapping.NDOMapping mapping = NDO.Mapping.NDOMapping.Create(fileName + ".new");
            mapping.SchemaVersion = "1.0";
            NDO.Mapping.Connection conn = new NDO.Mapping.Connection(mapping);
            conn.Type = database.ConnectionType;
            conn.Name = database.ConnectionString;
            conn.ID   = "C0";
            mapping.AddConnection(conn);
            foreach (NDOTreeNode treenode in databaseNode.Nodes)
            {
                TableNode tn = treenode as TableNode;
                if (tn != null && !tn.Table.Skipped)
                {
                    if (tn.Table.MappingType == TableMappingType.MappedAsClass ||
                        tn.Table.MappingType == TableMappingType.MappedAsIntermediateClass)
                    {
                        NDO.Mapping.Class cl = mapping.AddStandardClass(tn.Table.Namespace + "." + tn.Table.ClassName, ass.ProjectName, null);
                        // Todo: Check, if not other options were choosed.
                        if (tn.Table.MappingType == TableMappingType.MappedAsIntermediateClass)
                        {
                            //cl.Oid.ParentRelation = tn.DualKeyRelations[0];
                            //cl.Oid.ChildRelation = tn.DualKeyRelations[1];
                        }
                        if (((DatabaseNode)tn.Parent).Database.OwnerName != string.Empty)
                        {
                            cl.TableName = ((DatabaseNode)tn.Parent).Database.OwnerName + "." + tn.Table.Name;
                        }
                        else
                        {
                            cl.TableName = tn.Table.Name;
                        }
                        cl.ConnectionId = "C0";
                        AddFields(tn, cl);
                        AddRelations(tn, cl);
                    }
                }
            }
            MergeableFile mergeableFile = new MergeableFile(fileName);
            Stream        dummy         = mergeableFile.Stream; // moves the file to filename.old

            dummy.Close();
            try
            {
                mapping.Save();
                if (File.Exists(mergeableFile.OldFileName))
                {
                    Merge.CommentPrefix = "<!--";
                    Merge.MergeFiles(mergeableFile.OldFileName, fileName + ".new", fileName);
                    File.Delete(mergeableFile.OldFileName);
                    File.Delete(fileName + ".new");
                }
                else
                {
                    File.Copy(fileName + ".new", fileName, true);
                    File.Delete(fileName + ".new");
                }
            }
            catch (Exception ex)
            {
                mergeableFile.Restore();
                throw ex;
            }
        }