public object CreateDocumentValue(PersistentMemberMap memberMapBase, object value) { if (memberMapBase == null) throw new ArgumentNullException("memberMapBase"); this.value = value; memberMapBase.Accept(this); return this.value; }
/// <summary> /// Gets the next member map. /// </summary> /// <param name="currentMemberMap">The current member map.</param> /// <param name="nextMemberName">Name of the next member.</param> /// <returns></returns> private PersistentMemberMap GetNextMemberMap(PersistentMemberMap currentMemberMap, string nextMemberName) { var memberMap = currentMemberMap as ValueTypeMemberMap; if (memberMap != null && memberMap.ValueType is NestedClassValueType) { var nestedClassMap = ((NestedClassValueType)memberMap.ValueType).NestedClassMap; currentMemberMap = nestedClassMap.GetMemberMapBaseFromMemberName(nextMemberName) as PersistentMemberMap; if (currentMemberMap == null) throw new InvalidOperationException("Only persistent member maps are allowed."); this.Key += currentMemberMap.Key; return currentMemberMap; } else if (memberMap != null && memberMap.ValueType is ManyToOneValueType) { var refType = ((ManyToOneValueType)memberMap.ValueType).ReferenceType; var classMap = this.mappingStore.GetClassMapFor(refType); if (classMap.IdMap.MemberName == nextMemberName) { this.Key += ".$id"; return classMap.IdMap; } else throw new NotSupportedException("Id is the only supported condition across a reference."); } throw new NotSupportedException(string.Format("The value type {0} must occur last.", currentMemberMap)); }