C# Fluent NHibernate 概览映射

C# Fluent NHibernate Overview Mapping

我有三个类:

public class BaseEntity
{
    public int Id { get; set; }
}

public class DocumentOverview : BaseEntity
{
    public string Name { get; set; }
}

public class Document : DocumentOverview
{
    public byte[] Data{ get; set; }
}

在我的应用程序中有一棵树,我想加载文档名称并将它们列在那里。只有选择TreeItem时,我才加载文档实体以节省流量。

我不想在我的映射中有冗余代码,所以我的第一次尝试是这样的:

public class DocumentOverviewMaps<T> : ClassMap<T> where T : DocumentOverview
{
    public DocumentOverviewMaps()
    {
        Table("Documents");
        Id(x => x.Id);
        Map(x => x.Name).Not.Nullable();
    }
}

public class DocumentMaps : DocumentOverviewMaps<Document>
{
    public DocumentMaps()
    {
        Map(x => x.Data).CustomType<BinaryBlobType>().Nullable();
    }
}

这不起作用我总是得到大文档实体,即使在加载概览时也是如此。

我发现您可以使用 SubclassMap<> 但这不起作用,因为它用于从不同的表加载。

有什么方法可以让这个运行没有多余的代码吗?

怎么样:

public class DocumentBaseMap : ClassMap<T> where T : DocumentOverview
{
    public DocumentBaseMap()
    {
        Table("Documents");
        Id(x => x.Id);
        Map(x => x.Name).Not.Nullable();
    }
}

public class DocumentOverviewMap : DocumentBaseMap<DocumentOverview>
{
}

public class DocumentMap : DocumentBaseMap<Document>
{
    public DocumentMap() 
        : base()
    {
        Map(x => x.Data).CustomType<BinaryBlobType>().Nullable();
    }
}

我想知道您的基础 class 映射中缺少类型参数是否是您只获得 Document 类型的原因?空的DocumentOverviewMapclass有点臭。如果问题是需要定义 DocumentDocumentOverview 类型的映射,那么可能有更好的方法来做到这一点。