在nHibernate中为泛型类建模的最佳方式

本文关键字:最佳 方式 建模 泛型类 nHibernate | 更新日期: 2023-09-27 18:28:21

假设我有一个类,类似于。。。

public class SomeClass<T> where T : ISomeConstrainingInterface
{
    public T MyPropertyOfTypeT {get;set;}
    public int SomeIntProp {get;set;}
    public string SomeStringProp {get;set;}
}

其中T可以是一个相当小的有限集(比如5或6种类型)

在nHibernate中映射此类的最佳和最有效的方法是什么?(使用fluentNHibernate)

在nHibernate中为泛型类建模的最佳方式

这将为SomeClass的每个类型concreate创建一个单独的表,因此不同的Id类型没有问题,并且可以使用外键。SomeClass应该实现一个接口,这样所有的接口都可以被查询和处理。

public abstract class SomeClassMapBase<T> : ClassMap<SomeClass<T>>
{
    public SomeClassMapBase()
    {
        Map(x => x.SomeIntProp);
        Map(x => x.SomeStringProp);
    }
}
public class SomeClassReferencedClassMap : SomeClassMapBase<ReferencedClass>
{
    public SomeClassReferencedClassMap()
    {
        CompositeId()
            .KeyReference(x => x.Referenced, "Refernece_id");
    }
}