public IPersistentAssemblyInfo Build(string customer, string order, string orderLine, string masterDetailDynamicAssembly) { var objectSpace = new XPObjectSpace(XafTypesInfo.Instance, XpandModuleBase.XpoTypeInfoSource, () => new UnitOfWork(_session.DataLayer)); var persistentAssemblyBuilder = PersistentAssemblyBuilder.BuildAssembly(objectSpace, masterDetailDynamicAssembly); IClassInfoHandler classInfoHandler = persistentAssemblyBuilder.CreateClasses(GetClassNames(customer, order, orderLine)); classInfoHandler.CreateTemplateInfos(persistentClassInfo => GetTemplateInfos(persistentClassInfo, customer, order)); classInfoHandler.SetInheritance(info => GetInheritance(info)); classInfoHandler.CreateReferenceMembers(classInfo => GetReferenceMembers(classInfo, customer, order, orderLine), true); objectSpace.CommitChanges(); return(persistentAssemblyBuilder.PersistentAssemblyInfo); }
public ITypeHandler <T1, T2> OneToMany() { _persistentAssemblyBuilder = GetPersistentAssemblyBuilder(); var type1 = typeof(T1); var type2 = typeof(T2); var type1Name = getName(type1); var type2Name = getName(type2); var classHandler = _persistentAssemblyBuilder.CreateClasses(new[] { type1Name, type2Name }); classHandler.CreateReferenceMembers(info => info.Name == type2Name ? new[] { info.PersistentAssemblyInfo.PersistentClassInfos[0] } : null, true); createTypes(type1, type2, _persistentAssemblyBuilder, type1Name, type2Name); return(this); }
void createTypes(Type type1, Type type2, PersistentAssemblyBuilder persistentAssemblyBuilder, string type1Name, string type2Name) { var persistentClassInfo1 = persistentAssemblyBuilder.PersistentAssemblyInfo.PersistentClassInfos[0]; var persistentClassInfo2 = persistentAssemblyBuilder.PersistentAssemblyInfo.PersistentClassInfos[1]; addInterface(type1, persistentClassInfo1); addInterface(type2, persistentClassInfo2); _XPObjectSpace.CommitChanges(); var compileModule = new CompileEngine().CompileModule(persistentAssemblyBuilder, Path.GetDirectoryName(Application.ExecutablePath)); _t1Type = compileModule.Assembly.GetTypes().Single(type => type.Name == type1Name); _t2Type = compileModule.Assembly.GetTypes().Where(type => type.Name == type2Name).Single(); }
public ITypeHandler <T1, T2> ManyToMany() { PersistentAssemblyBuilder persistentAssemblyBuilder = GetPersistentAssemblyBuilder(); var type1 = typeof(T1); var type2 = typeof(T2); var type1Name = getName(type1); var type2Name = getName(type2); var classHandler = persistentAssemblyBuilder.CreateClasses(new[] { type1Name, type2Name }); IPersistentAssemblyInfo persistentAssemblyInfo = persistentAssemblyBuilder.PersistentAssemblyInfo; var persistentClassInfo1 = persistentAssemblyInfo.PersistentClassInfos[0]; var persistentClassInfo2 = persistentAssemblyInfo.PersistentClassInfos[1]; classHandler.CreateCollectionMember(persistentClassInfo1, type2Name + "s", persistentClassInfo2); classHandler.CreateCollectionMember(persistentClassInfo2, type1Name + "s", persistentClassInfo1, type2Name + "s"); createTypes(type1, type2, persistentAssemblyBuilder, type1Name, type2Name); return(this); }