protected EmbeddedPart <TEmbedded> Embedded <TEmbedded>(Expression <Func <T, TEmbedded> > property) { var part = new EmbeddedPart <TEmbedded>(property.ToPropertyInfo()); this.embeddedParts.Add(part); return(part); }
/// <summary> /// TODO: Remimplement circular reference prevention /// </summary> /// <param name="doc"></param> /// <param name="part"></param> /// <param name="context"></param> private void BuildEmbedded(DocumentMapping doc, EmbeddedPart <T> part, BuildContext context) { var oldMaxLevel = this.maxLevel; var embedded = part; // var property = part.Property.ToPropertyInfo(); var elementType = part.GetType().GetGenericArguments()[0]; this.level++; //var localPrefix = embedded.InternalPrefix == "." ? property.Name + "." : embedded.InternalPrefix; //if (this.maxLevel == int.MaxValue && context.Processed.Contains(elementType)) // throw new Exception("Circular reference"); //if (this.level <= this.maxLevel) // { // context.Processed.Add(elementType); var map = embedded.GetMapping(); // map.Prefix = localPrefix; if (typeof(IEnumerable).IsAssignableFrom(elementType)) { map.IsCollection = true; } doc.Embedded.Add(map); //var actualType = property.PropertyType; //context.Processed.Remove(actualType); // } //this.level--; // this.maxLevel = oldMaxLevel; }