public void Apply(Type entityType, @class classElement, IEnumerable<Type> entityTypes, hibernatemapping hbm) { //use reflection to get the Id property from the current class var idMember = entityType.GetFieldsAndProperties().SingleOrDefault(e => e.Name.ToLower() == "id" || e.GetCustomAttributes(typeof(KeyAttribute), false).Any()); if (idMember != null) { var idType = idMember.ReturnType(); //if the id property exists, add a new id element to the @class element classElement.id = new id() { name = idMember.Name.Sanitise(), column = { new column() .Setup(idMember) .Apply(c => c.notnull = true) //.Apply(c => c.index = "PK_" + classElement.table) //doesn't work for PK! } }; if (CanUseHiloGenerator(idType)) //if is integer of some kind { classElement.id.generator = new generator() { @class = "hilo", param = { param.Parse(@"<param name=""max_lo"" xmlns=""urn:nhibernate-mapping-2.2"" >10</param>"), param.Parse(@"<param name=""where"" xmlns=""urn:nhibernate-mapping-2.2"" >entity = '" + classElement.table + "'</param>"), param.Parse(@"<param name=""table"" xmlns=""urn:nhibernate-mapping-2.2"" >HiloValues</param>"), } }; this.entities.Add(classElement.table); } else if (idType == typeof(Guid)) { classElement.id.generator = new generator() { @class = "guid.comb"} ; } } }
public XRootNamespace(@class root) { this.doc = new XDocument(root.Untyped); this.rootObject = root; }