Свободное отображение NHibernate Сопоставление столбца с одним из двух столбцов - PullRequest
1 голос
/ 24 октября 2009

Я имею дело с устаревшим кодом поставщика, который не могу изменить. Я хотел бы обернуть базу данных слоем абстракции, который проще в использовании.

Учитывая следующие две таблицы, мне нужно создать отображение для 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 голосов
/ 08 декабря 2009

Это не элегантно, но я наконец-то придумал следующее:

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