mongodb c#驱动程序-继承、映射和序列化问题
对于存储在mongodb中的对象,我有以下类层次结构(我只在它们的图中存储分支对象和实体) 我得到以下异常: 测试方法应GetBranchToolTipAsync引发异常: System.ArgumentOutOfRangeException:memberInfo参数必须为 用于类分支,但用于类聚合 参数名称:memberInfo 在MongoDB.Bson.Serialization.BsonClassMap.EnsureMemberInFoisFortheClass(MemberInfo MemberInfo)上 在 MongoDB.Bson.Serialization.BsonClassMap.MapMember(MemberInfo MemberInfo) 在 MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.BuildProjectedSerializer(ProjectionMapping映射) 在 MongoDB.Driver.Linq.Translators.AggregateProjectTranslator.SerializerBuilder.BuildMemberInit(MemberInitExpression节点) 在 MongoDB.Driver.Linq.Translators.aggregateProjectTranslator.SerializerBuilder.Build(表达式节点) 在 MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.Build(表达式节点,IBMONSerializerRegistry serializerRegistry) 在 MongoDB.Driver.Linq.Translators.AggregateProjectTranslator.TranslateProject(表达式mongodb c#驱动程序-继承、映射和序列化问题,c#,.net,mongodb,mongodb-.net-driver,nosql,C#,.net,Mongodb,Mongodb .net Driver,Nosql,对于存储在mongodb中的对象,我有以下类层次结构(我只在它们的图中存储分支对象和实体) 我得到以下异常: 测试方法应GetBranchToolTipAsync引发异常: System.ArgumentOutOfRangeException:memberInfo参数必须为 用于类分支,但用于类聚合 参数名称:memberInfo 在MongoDB.Bson.Serialization.BsonClassMap.EnsureMemberInFoisFortheClass(MemberInfo M
1投影仪,IBMONSerializer
1参数序列化器,IBMONSerializerRegistry serializerRegistry)
在
MongoDB.Driver.IAggregateFluentExtensions.ProjectExpressionProjection2.Render(IBMOnSerializer
1 documentSerializer,IBMOnSerializerRegistry serializerRegistry)
这是什么原因?映射是不正确的还是在错误的时间调用的?据我接触过的mongodb开发人员称,这是一个问题
将在2.0.1及更高版本中对此进行改进。我猜您缺少一个鉴别器。
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();