예제 #1
0
파일: XmlExt.cs 프로젝트: feihuobuke/xCoder
        public static void Write(this XmlElement applyNode, XmlNodeSchema schema)
        {
            var xml = applyNode.OwnerDocument;
            if (xml == null)
            {
                return;
            }

            if (string.IsNullOrEmpty(schema.Name))
            {
                return;
            }
            var node = xml.CreateElement(schema.Name);
            foreach (string property in schema.Properties)
            {
                var value = schema.Properties[property];
                if (string.IsNullOrEmpty(value))
                {
                    continue;
                }
                var attribute = xml.CreateAttribute(property);
                attribute.Value = value;
                node.Attributes.Append(attribute);
            }
            applyNode.AppendChild(node);
            if (schema.ChildNodes == null) return;
            foreach (var childNode in schema.ChildNodes)
            {
                Write(node, childNode);
            }
        }
예제 #2
0
        protected string[] HBMFileGenerate()
        {
            var tmp = new List<string>();
            foreach (var table in DataBase.Tables)
            {
                var xml = new XmlDocument();
                var version = xml.CreateXmlDeclaration("1.0", "utf-8", "");
                xml.AppendChild(version);
                var root = xml.CreateElement("hibernate-mapping", "urn:nhibernate-mapping-2.2");
                xml.AppendChild(root);
                var classNode = xml.CreateElement("class");
                var nameAttribute = xml.CreateAttribute("name");
                nameAttribute.Value = AssemblyTypeFormat(table);
                classNode.Attributes.Append(nameAttribute);
                var tableAttribute = xml.CreateAttribute("table");
                tableAttribute.Value = string.Format(string.IsNullOrEmpty(table.Owner) ? "{1}" : "{0}.{1}", table.Owner, table.Name);
                classNode.Attributes.Append(tableAttribute);
                foreach (var col in table.Columns.OrderBy(t => t.Index).ToList())
                {
                    XmlElement property;
                    if (col.PrimaryKey)
                    {
                        property = xml.CreateElement("id");
                        var genor = xml.CreateElement("generator");
                        var genorClassAttribute = xml.CreateAttribute("class");
                        genorClassAttribute.Value = col.DBType.Equals("int") ? "identity" : "guid";
                        genor.Attributes.Append(genorClassAttribute);
                        property.AppendChild(genor);
                    }
                    else
                    {
                        property = xml.CreateElement("property");
                    }
                    var propertyNameAttribute = xml.CreateAttribute("name");
                    propertyNameAttribute.Value = col.FieldName ?? col.Name;
                    property.Attributes.Append(propertyNameAttribute);

                    var propertyColumnAttribute = xml.CreateAttribute("column");
                    propertyColumnAttribute.Value = col.Name;
                    property.Attributes.Append(propertyColumnAttribute);

                    if (col.Nullable)
                    {
                        var propertyNotNullAttribute = xml.CreateAttribute("not-null");
                        propertyNotNullAttribute.Value =
                            (!col.Nullable).ToString(CultureInfo.InvariantCulture).ToLower();
                        property.Attributes.Append(propertyNotNullAttribute);
                    }
                    classNode.AppendChild(property);
                }
                var parents = table.Parents.Where(t => !string.IsNullOrEmpty(t.ColumnRelated) && !string.IsNullOrEmpty(t.TableRelated)).ToList();
                foreach (var parent in parents)
                {
                    var schema = new XmlNodeSchema
                    {
                        Name = "many-to-one",
                        Properties = new NameValueCollection { { "name", parent.ClassName ?? parent.TableRelated }, { "column", parent.Column }, { "cascade", "none" }, { "unique", "true" }, { "class", AssemblyTypeFormat(parent) }, }
                    };
                    classNode.Write(schema);
                }

                var childs = table.Childs.Where(t => !string.IsNullOrEmpty(t.ColumnRelated) && !string.IsNullOrEmpty(t.TableRelated)).ToList();
                foreach (var child in childs)
                {

                    var schema = new XmlNodeSchema
                                     {
                                         Name = "list",
                                         Properties = new NameValueCollection
                                         {
                                             {"name",child.TableRelated+"List"},
                                             {"table",child.TableRelated},
                                             {"cascade","all-delete-orphan"},
                                             {"lazy","true"},
                                         }
                                     };
                    schema.ChildNodes = new List<XmlNodeSchema>
                                          {
                                              new XmlNodeSchema
                                              {
                                                  Name = "key",
                                                  Properties = new NameValueCollection{{"column",child.ColumnRelated}}
                                              },
                                              new XmlNodeSchema
                                              {
                                                  Name = "one-to-many",
                                                  Properties = new NameValueCollection{{"class", AssemblyTypeFormat(child)}}
                                              }

                                          };
                    classNode.Write(schema);
                }

                root.AppendChild(classNode);
                var fileName = string.Format("{0}{1}.hbm.xml", Directory.FullName, table.Name);
                xml.Save(fileName);
                tmp.Add(fileName);
            }
            return tmp.ToArray();
        }