2009-10-23 31 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"); 
    } 
}