2009-10-23 60 views
1

我正在处理一些我无法修改的旧供应商代码。我想用易于使用的抽象层来包装数据库。流利的NHibernate将列映射到两列中的一列

鉴于以下两个表,我需要创建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 
) 

回答

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"); 
    } 
}