예제 #1
0
 void ImportManyToManyCollection(UnitOfWork outputUow, UnitOfWork intputUow,
                              object xpoObject, ImportedMemberInfo importedMemberInfo, object objectToImport,
                              InputMemberInfo memberInfo) {
     if (!importedMemberInfo.InitialData.DataProvider)
         return;
     var xpClassInfo = intputUow.Dictionary.GetClassInfo(null, importedMemberInfo.InitialData.DataProviderTableName);
     var criteriaOperator = CriteriaOperator.Parse(importedMemberInfo.InitialData.DataProviderQueryColumnName + "=?", objectToImport);
     using (var xpCollection = new XPCollection(intputUow, xpClassInfo, criteriaOperator)) {
         var collection = (XPBaseCollection)memberInfo.GetValue(xpoObject);
         var dataProviderResultInfo = xpClassInfo.GetMember(importedMemberInfo.InitialData.DataProviderResultColumnName);
         foreach (var o in xpCollection) {
             var listElementTypeInfo = memberInfo.CollectionElementType;
             var memberValue = dataProviderResultInfo.GetValue(o);
             bool returnKey;
             bool returnImportKey;
             var referenceMemberValue = GetReferenceMemberValue(outputUow, memberValue, listElementTypeInfo.ClassType, out returnKey, out returnImportKey);
             if (returnKey) {
                 AddFillRefInfo(memberInfo, xpoObject, referenceMemberValue);
             } if (returnImportKey) {
                 AddFillRefAndImportInfo(memberInfo, xpoObject, referenceMemberValue);
             } else {
                 collection.BaseAdd(referenceMemberValue);
             }
         }
     }
 }
예제 #2
0
 object ImportSingle(object objectKeyToImport, object objectToImport, UnitOfWork outputUow, UnitOfWork inputUow, XPClassInfo classInfo, IEnumerable<InputMemberInfo> memberInfos) {
     var objectDictionary = GetObjectDictionary(classInfo.ClassType);
     var xpoObject = CreateInstance(classInfo.ClassType, outputUow);
     AddObjectToCache(objectDictionary, objectKeyToImport, xpoObject);
     foreach (var memberInfo in memberInfos) {
         var importedMemberInfo = new ImportedMemberInfo(classInfo, memberInfo);
         if (importedMemberInfo.MemberInfo.IsAssociationList) {
             ImportManyToManyCollection(outputUow, inputUow, xpoObject, importedMemberInfo, objectToImport, memberInfo);
         } else {
             ImportSimpleProperty(outputUow, inputUow, memberInfo, importedMemberInfo, objectToImport, xpoObject);
         }
     }
     return xpoObject;
 }
예제 #3
0
 void ImportSimpleProperty(UnitOfWork outputUow, UnitOfWork inputUow, InputMemberInfo memberInfo, ImportedMemberInfo importedMemberInfo, object objectToImport, object xpoObject) {
     XPMemberInfo xpMemberInfo = importedMemberInfo.MemberInfo;
     if (xpMemberInfo != null) {
         var value = xpMemberInfo.GetValue(objectToImport);
         if (memberInfo.ReferenceType != null && memberInfo.ReferenceType.IsPersistent) {
             var memberType = ((InputObjectClassInfo)memberInfo.ReferenceType).OutputClassInfo.ClassType;
             bool returnKey;
             bool returnImportKey;
             value = GetReferenceMemberValue(outputUow, value, memberType, out returnKey, out returnImportKey);
             if (returnKey) {
                 AddFillRefInfo(memberInfo, xpoObject, value);
                 return;
             }
             if (returnImportKey) {
                 value = inputUow.GetKeyValue(value);
                 AddFillRefAndImportInfo(memberInfo, xpoObject, value);
                 return;
             }
         }
         memberInfo.SetOutputMemberValue(xpoObject, value);
     }
 }
예제 #4
0
 void ImportMembers(InputObjectClassInfo inputObjectClassInfo, ICollection objectsToImport, List<object> keysToImport, UnitOfWork outputUow, List<InputMemberInfo> inputMemberInfos, UnitOfWork inputUow) {
     int keysCounter = 0;
     var objectDictionary = GetObjectDictionary(inputObjectClassInfo.OutputClassInfo.ClassType);
     foreach (var objectToImport in objectsToImport) {
         object objectKey = keysToImport[keysCounter++];
         if (objectDictionary.ContainsKey(objectKey)) continue;
         var xpoObject = CreateInstance(inputObjectClassInfo.OutputClassInfo.ClassType, outputUow);
         AddObjectToCache(objectDictionary, objectKey, xpoObject);
         foreach (var inputMemberInfo in inputMemberInfos) {
             var importedMemberInfo = new ImportedMemberInfo(inputObjectClassInfo, inputMemberInfo);
             if (inputMemberInfo.IsAssociationList) {
                 ImportManyToManyCollection(outputUow, inputUow, xpoObject, importedMemberInfo, objectToImport, inputMemberInfo);
             } else {
                 ImportSimpleProperty(outputUow, inputUow, inputMemberInfo, importedMemberInfo, objectToImport, xpoObject);
             }
         }
     }
 }