2016-12-20 84 views
0

我有以下数据结构MongoDB的类映射

internal class FixtureNodeBase 
{ 
    public FixtureNodeBase(string name, IEnumerable<FixtureNodeBase> children) 
    { 
    Name = name; 
    Children = children.ToList().AsReadOnly(); 
    } 

    public string Name { get; } 

    public IReadOnlyList<FixtureNodeBase> Children { get; } 
} 

internal class FixtureNode : FixtureNodeBase 
{ 
    public FixtureNode(
    string name, 
    string assembly, 
    string runnableName, 
    IEnumerable<FixtureNodeBase> children) 
    : base(name, children) 
    { 
    Assembly = assembly; 
    RunnableName = runnableName; 
    } 

    public string Assembly { get; } 

    public string RunnableName { get; } 
} 

internal class FixtureTree 
{ 
    public FixtureTree(FixtureNodeBase root) 
    { 
    Root = root; 
    } 

    public FixtureNodeBase Root { get; } 
} 

internal class Build 
{ 
    public Build(FixtureTree fixtures) 
    { 
    Fixtures = fixtures; 
    } 

    public FixtureTree Fixtures { get; } 
} 

为我用以下的数据结构映射

BsonClassMap.RegisterClassMap<Build>(
    cm => 
    { 
    cm.MapMember(x => x.Fixtures); 
    cm.MapCreator(x => new Build(x.Fixtures)); 
}); 

BsonClassMap.RegisterClassMap<FixtureTree>(
    cm => 
    { 
    cm.MapMember(x => x.Root); 
    cm.MapCreator(x => new FixtureTree(x.Root)); 
}); 

BsonClassMap.RegisterClassMap<FixtureNodeBase>(
    cm => 
    { 
    cm.MapMember(x => x.Name); 
    cm.MapMember(x => x.Children); 
    cm.MapCreator(x => new FixtureNodeBase(x.Name, x.Children)); 
}); 

BsonClassMap.RegisterClassMap<FixtureNode>(
    cm => 
    { 
    cm.MapMember(x => x.Name); 
    cm.MapMember(x => x.Assembly); 
    cm.MapMember(x => x.RunnableName); 
    cm.MapMember(x => x.Children); 
    cm.MapCreator(x => new FixtureNode(x.Name, x.Assembly, x.RunnableName, x.Children)); 
}); 

,并抛出例外FixtureNode映射:

“系统.ArgumentOutOfRangeException:memberInfo参数必须用于类FixtureNode,但用于类FixtureNodeBase。“与例如

LINQPad文件可以从这里example.linq

下载如果您有任何想法,如何解决该问题,请分享你的想法。

回答

0

看来,我发现我的错:

BsonClassMap.RegisterClassMap<FixtureNode>(
    cm => 
    { 
    cm.MapMember(x => x.Name); 
    cm.MapMember(x => x.Assembly); 
    cm.MapMember(x => x.RunnableName); 
    cm.MapMember(x => x.Children); 
    cm.MapCreator(x => new FixtureNode(x.Name, x.Assembly, x.RunnableName, x.Children)); 
}); 

必须更新以

BsonClassMap.RegisterClassMap<FixtureNode>(
    cm => 
    { 
    cm.MapMember(x => x.Assembly); 
    cm.MapMember(x => x.RunnableName); 
    cm.MapCreator(x => new FixtureNode(x.Name, x.Assembly, x.RunnableName, x.Children)); 
}); 

即映射用于从基类NameChildren构件应被删除形式继承的类映射。