public override Evaluant.Uss.Commands.CreateEntityCommand Visit(Evaluant.Uss.Commands.CreateEntityCommand item) { InsertMessage insert; IRequestMessage message; if (this.insert != null) { Domain.Entity e = new Evaluant.Uss.Domain.Entity(item.ParentEntity.Type); e.Id = item.ParentId; //e.AddValue("_id", item.ParentId); this.insert.Documents.Add(e); commands.Add(item.ParentEntity, this.insert); } else if (!commands.TryGetValue(item.ParentEntity, out message)) { this.insert = new InsertMessage() { FullCollectionName = database + "." + item.Type }; messages.Add(this.insert); message = this.insert; commands.Add(item.ParentEntity, message); insert = (InsertMessage)message; Domain.Entity e = new Evaluant.Uss.Domain.Entity(item.ParentEntity.Type); e.Id = item.ParentId; //e.AddValue("_id", item.ParentId); insert.Documents.Add(e); } else throw new NotSupportedException(); return item; }
public override Evaluant.Uss.Commands.CreateReferenceCommand Visit(Evaluant.Uss.Commands.CreateReferenceCommand item) { IRequestMessage message; if (!commands.TryGetValue(item.ParentEntity, out message)) throw new NotSupportedException(); InsertMessage im = message as InsertMessage; if (im != null) { foreach (Domain.Entity e in im.Documents) { ICollection<Domain.Entry> entities; if (e.Id == item.ParentId) { Domain.Entry entry; if (item.Reference.ToMany) { if (!e.TryGet(item.Reference.Name, out entry)) { entry = new Domain.MultipleEntry(item.Reference.Name); e.Add(entry); } entities = (Domain.MultipleEntry)entry; } else entities = e; Domain.Entity dbref = new Evaluant.Uss.Domain.Entity(item.ChildType); dbref.Add("$ref", item.ChildType); dbref.Add("$id", item.ChildId); entities.Add(Domain.Entry.Create(item.Reference.Name, State.New, dbref)); break; } } } return item; }