2009-10-23 6 views
1

Je suis en train de traiter un code de fournisseur hérité que je ne peux pas modifier. Je voudrais emballer la base de données avec une couche d'abstraction plus facile à utiliser.Fluid NHibernate Mappage d'une colonne sur l'une des deux colonnes

Compte tenu des deux tableaux ci-dessous, je dois créer un mappage pour Process.Route qui trouvera la route correspondant à un processus donné, mais qui peut être soit dbo.Route.SourceProcessID ou 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 
) 

Répondre

0

Ce n'est pas élégant, mais je me suis finalement venu avec les éléments suivants:

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