我有以下存储在 mongodb 中的对象的类层次结构(我仅在其图中存储分支对象和实体)
public class Branch : Aggregate
{
public IEnumerable<LocalizableText> Description { get; set; }
public ObjectId PartnerId { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public string Timetable { get; set; }
public IEnumerable<Discount> Discounts { get; set; }
public IEnumerable<Category> Categories { get; set; }
public IEnumerable<Phone> Phones { get; set; }
public byte[] Icon { get; set; }
public byte[] Image { get; set; }
}
public abstract class Aggregate : Entity
{
public ObjectId Id { get; set; }
}
public abstract class Entity
{
public IEnumerable<LocalizableText> Name { get; set; }
}
我在服务器启动时为此层次结构运行以下注册:
BsonClassMap.RegisterClassMap<Entity>();
BsonClassMap.RegisterClassMap<Aggregate>(cm =>
{
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(a => a.Id));
});
BsonClassMap.RegisterClassMap<Branch>();
但是当我运行这个查询时
return await Collection.Aggregate().Match(x => x.PartnerId == partnerId)
.Group(x => x.PartnerId, g => new
{
PartnerId = g.Key,
g.First(x => x.Name != null).Name,
Description = g.First(x => x.Id == branchId).Name,
g.First(x => x.Id == branchId).Discounts,
Id = branchId
})
.Project(g => new Branch()
{
Id = g.Id,
Name = g.Name,
Description = g.Description,
Discounts = g.Discounts,
PartnerId = g.PartnerId
}).FirstOrDefaultAsync();
我收到以下异常:
测试方法 ShouldGetBranchToolTipAsync 抛出异常:
System.ArgumentOutOfRangeException:memberInfo 参数必须是
适用于 Branch 类,但适用于 Aggregate 类。
参数名称:成员信息
在 MongoDB.Bson.Serialization.BsonClassMap.EnsureMemberInfoIsForThisClass(MemberInfo memberInfo)
在
MongoDB.Bson.Serialization.BsonClassMap.MapMember(MemberInfo memberInfo)
在
MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.BuildProjectedSerializer(ProjectionMapping 映射)
在
MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.BuildMemberInit(MemberInitExpression 节点)
在
MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.Build(表达式节点)
在
MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.Build(表达式节点,IBsonSerializerRegistryserializerRegistry)
在
MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.TranslateProject(表达式1 projector, IBsonSerializer
1参数Serializer,IBsonSerializerRegistry序列化器注册表)
在
MongoDB.Driver.IAggregateFluentExtensions.ProjectExpressionProjection2.Render(IBsonSerializer
1 documentSerializer、IBsonSerializerRegistry 序列化器注册表)
这是什么原因呢?映射是否不正确或在错误的时间调用?