2011-06-20 193 views
0

我只是试图让一个项目,并用流利的自动映射运行(我熟悉流利,但用来写每个地图)功能NHibernate自动映射 - 问题与自动映射覆盖

我有一个反对ScriptType具有ParseRules财产

public class ScriptType : EntityBase 
{ 
    public virtual string Name { get; set; } 
    public virtual IList<ParseRule> ParseRules { get; set; } 
} 

这被自动映射为的hasMany,我想引用。

因此,我增加了一个自动映射覆盖到另一个组件...

public class ScriptTypeOverride : IAutoMappingOverride<ScriptType> 
{ 
    public void Override(AutoMapping<ScriptType> mapping) 
    { 
     mapping.References(x => x.ParseRules); 
    } 
} 

而且改变了我的配置,所以......

return configuration 
      .Mappings(m => m.AutoMappings 
           .Add(AutoMap.AssemblyOf<DatabaseInfo>() 
             .IgnoreBase<EntityBase>() 
             .Conventions.AddFromAssemblyOf<KeyConvention>() 
             .UseOverridesFromAssemblyOf<ScriptTypeOverride>())); 

但我得到这个.... :(

来自表ScriptType的关联指的是未映射的类:System.Collections.Generic.IList`1 [[GIT.ScriptWizard.Entities.ParseRule ...

任何人都可以帮忙吗?

+0

如果您有ParseRules的列表,则不能使用参考。引用是针对单个对象引用,而不是集合。像IList <>这样的集合需要一个HasMany。 –

+0

感谢卡尔,你是对的 - 我误解了什么是参考。 –

回答

4

References是一个用于创建多到一个 关系的两个实体之间, 和应用上的“多面”。 您正在参考另一个 实体,因此您使用References 方法。 HasMany是 ,References关系的“另一侧”,并且在“一侧”上应用 。

Fluent's website

您的关系应该如何工作?它看起来像一个经典的ScriptType -to-many ParseRules,所以这应该是HasManyScriptType的一边,就像Fluent一样。

也许,如果你想在这里有双向关系,其中ParseRule的一侧是关系的“拥有”一方,你应该在ScriptType.ParseRules映射覆盖中使用Inverse()

+0

我想到参考文献正在做其他事情,我添加了一个HasManyToMany覆盖,它的一切都很好,谢谢 –