Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb c#驱动程序-继承、映射和序列化问题_C#_.net_Mongodb_Mongodb .net Driver_Nosql - Fatal编程技术网

mongodb c#驱动程序-继承、映射和序列化问题

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

对于存储在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(表达式
1投影仪,IBMONSerializer
1参数序列化器,IBMONSerializerRegistry serializerRegistry) 在 MongoDB.Driver.IAggregateFluentExtensions.ProjectExpressionProjection
2.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();