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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
        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);
        }