NHibernate / Fluent - 将多个对象映射到单个查找表

时间:2010-03-17 02:56:40

标签: nhibernate fluent-nhibernate

我正在努力使我的地图正确。

我所拥有的是一个单独的自我连接表,其中包含某些类型的查找值。每个查找都可以有一个父类,它可以是不同的类型。

为了简单起见,我们来看看Country和State的例子。

所以查找表看起来像这样:

查找   ID   键   值   LookupType   ParentId - 自我加入Id

基类

公共类查找:BaseEntity     {         public Lookup(){}

    public Lookup(string key, string value)
    {
        Key = key;
        Value = value;
    }

    public virtual Lookup Parent { get; set; }

    [DomainSignature]
    [NotNullNotEmpty]
    public virtual LookupType LookupType { get; set; }

    [NotNullNotEmpty]
    public virtual string Key { get; set; }

    [NotNullNotEmpty]
    public virtual string Value { get; set; }
}

查找地图

public class LookupMap : IAutoMappingOverride<DBLookup>
    {
        public void Override(AutoMapping<Lookup> map)
        {
            map.Table("Lookups");
            map.References(x => x.Parent, "ParentId").ForeignKey("Id");
            map.DiscriminateSubClassesOnColumn<string>("LookupType").CustomType(typeof(LookupType));

        }
    }

子类的BASE SubClass映射

public class BaseLookupMap:SubclassMap其中T:DBLookup     {

    protected BaseLookupMap()
    {
    }

    protected BaseLookupMap(LookupType lookupType) 
    {
        DiscriminatorValue(lookupType); 
        Table("Lookups");
    } 
}

示例子类映射

public class StateMap : BaseLookupMap<State>
    {
        protected StateMap() : base(LookupType.State) { }
    }

现在我已经几乎设置了我的映射,但是映射仍然期望每个类的表设置,所以期望一个'State'表存在,并引用状态查找表中的ID。

我希望这是有道理的。

当想要保持查找类型值可配置时,这似乎不是一种不常见的方法。

提前致谢。

的Al

0 个答案:

没有答案