Fluent NHibernate将列映射到两列中的一列

时间:2009-10-23 20:02:51

标签: .net fluent-nhibernate nhibernate-mapping

我正在处理一些我无法修改的遗留供应商代码。我想用一个更容易使用的抽象层包装数据库。

鉴于以下两个表,我需要为Process.Route创建一个映射,它将为给定的Process找到匹配的Route,但是可以是dbo.Route.SourceProcessID或dbo.Route.DestinationProcessID:

TABLE [dbo].[Route](
    [RouteID] [bigint] IDENTITY(1,1) NOT NULL,
    [SourceProcessID] [bigint] NOT NULL,
    [DestinationProcessID] [bigint] NOT NULL

TABLE [dbo].[Process](
    [ProcessID] [bigint] IDENTITY(1,1) NOT NULL
)

1 个答案:

答案 0 :(得分:0)

这不优雅,但我终于想出了以下内容:

public class Process
{
    public virtual IList<Route> SourceRoutes { get; set; }
    public virtual IList<Route> DestinationRoutes { get; set; }
}

public class ProcessOverride : IAutoMappingOverride<Process>
{
    public void Override(AutoMapping<Process> mapping)
    {
        mapping.HasMany(proc => proc.SourceRoutes).Table("Routes").KeyColumn("SourceID");
        mapping.HasMany(proc => proc.DestinationRoutes).Table("Routes").KeyColumn("DestID");
    }
}