Example #1
0
        private static object GetObjectKey(EntityMap entityMap, object entityObject, bool isPersisted)
        {
            FieldMap[] keyFields = entityMap.KeyFields;
            // Paul Welter (http://www.LoreSoft.com) -- allow inserts by using all columns as key
            if (keyFields.Length == 0 || entityMap.KeyType == KeyType.None)
            {
                keyFields = entityMap.Fields;
            }

            object[] keyArray = new object[keyFields.Length];

            for (int index = 0; index < keyFields.Length; index++)
            {
                string keyMember = keyFields[index].Member;
                object keyValue  = GetMember(entityMap, entityObject, keyMember);
                if (entityMap.KeyType == KeyType.None && keyValue == null)
                {
                    keyValue = string.Empty;
                }
                if (EntityKey.IsNull(keyValue, isPersisted))
                {
                    switch (entityMap.KeyType)
                    {
                    case KeyType.Auto: keyValue = EntityKey.GetAutoKey(keyValue, entityMap.Type); break;

                    case KeyType.Guid: keyValue = EntityKey.GetGuidKey(keyValue is Guid); break;

                    default: throw new ORMapperException("ObjectSpace: Entity Object is missing Key - " + entityMap.Type);
                    }
                    if (entityMap.HasHelper)
                    {
                        ((IObjectHelper)entityObject)[keyMember] = keyValue;
                    }
                    else
                    {
                        if (entityMap.Member(keyMember) is FieldInfo)
                        {
                            (entityMap.Member(keyMember) as FieldInfo).SetValue(entityObject, keyValue);
                        }
                        else
                        {
                            (entityMap.Member(keyMember) as PropertyInfo).SetValue(entityObject, keyValue, null);
                        }
                    }
                }

                keyArray[index] = keyValue;
            }

            if (keyArray.Length == 1)
            {
                return(keyArray[0]);
            }
            else
            {
                return(keyArray);
            }
        }
Example #2
0
 // Includes Support for Enumerated Member Types from Jerry Shea (http://www.RenewTek.com)
 internal static object SetField(EntityMap entityMap, object entityObject, string member, object value, CustomProvider provider)
 {
     Type type = EntityMap.GetType(entityMap.Member(member));
     object typedValue = QueryHelper.ChangeType(value, type);
     if (entityMap.HasHelper) {
         try {
             ((IObjectHelper)entityObject)[member] = typedValue;
         }
         catch (Exception exception) {
             if (typedValue == null) {
                 throw new ORMapperException("ObjectSpace: SetField failed for NULL " + member + " : " + entityMap.Type, exception);
             }
             else {
                 throw new MappingException("Mapping: IObjectHelper is missing " + member + " : " + entityMap.Type, exception);
             }
         }
     }
     else {
         try {
             // Improved Support for Embedded Objects from Chris Schletter (http://www.thzero.com)
             object memberValue = entityObject;
             string[] memberParts = member.Split('.');
             for (int index = 0; index < memberParts.Length; index++) {
                 string typeName = memberValue.GetType().ToString();
                 MemberInfo memberField = EntityMap.FindField(typeName, memberParts[index]);
                 if (index == memberParts.Length - 1) {
                     if (memberField is FieldInfo) {
                         (memberField as FieldInfo).SetValue(memberValue, typedValue);
                     }
                     else {
                         (memberField as PropertyInfo).SetValue(memberValue, typedValue, null);
                     }
                 }
                 else {
                     if (memberField is FieldInfo) {
                         memberValue = (memberField as FieldInfo).GetValue(memberValue);
                     }
                     else {
                         memberValue = (memberField as PropertyInfo).GetValue(memberValue, null);
                     }
                 }
             }
         }
         catch (Exception exception) {
             if (typedValue == null) {
                 throw new ORMapperException("ObjectSpace: SetField failed for NULL " + member + " : " + entityMap.Type, exception);
             }
             else {
                 throw new ORMapperException("ObjectSpace: SetField failed for " + member + " : " + entityMap.Type, exception);
             }
         }
     }
     return typedValue;
 }
Example #3
0
		private static object GetObjectKey(EntityMap entityMap, object entityObject, bool isPersisted) {
			FieldMap[] keyFields = entityMap.KeyFields;
			// Paul Welter (http://www.LoreSoft.com) -- allow inserts by using all columns as key
			if (keyFields.Length == 0 || entityMap.KeyType == KeyType.None) {
				keyFields = entityMap.Fields;
			}

			object[] keyArray = new object[keyFields.Length];

			for (int index = 0; index < keyFields.Length; index++) {
				string keyMember = keyFields[index].Member;
				object keyValue = GetMember(entityMap, entityObject, keyMember);
				if (entityMap.KeyType == KeyType.None && keyValue == null) keyValue = string.Empty;
				if (EntityKey.IsNull(keyValue, isPersisted)) {
					switch (entityMap.KeyType) {
						case KeyType.Auto: keyValue = EntityKey.GetAutoKey(keyValue, entityMap.Type); break;
						case KeyType.Guid: keyValue = EntityKey.GetGuidKey(keyValue is Guid); break;
						default: throw new ORMapperException("ObjectSpace: Entity Object is missing Key - " + entityMap.Type);
					}
					if (entityMap.HasHelper) {
						((IObjectHelper) entityObject)[keyMember] = keyValue;
					}
					else {
						if (entityMap.Member(keyMember) is FieldInfo) {
							(entityMap.Member(keyMember) as FieldInfo).SetValue(entityObject, keyValue);
						}
						else {
							(entityMap.Member(keyMember) as PropertyInfo).SetValue(entityObject, keyValue, null);
						}
					}
				}

				keyArray[index] = keyValue;
			}

			if (keyArray.Length == 1)
				return keyArray[0];
			else
				return keyArray;
		}