流利的NHibernate的映射对两列一列 [英] Fluent NHibernate Mapping a column against one of two columns

查看:114
本文介绍了流利的NHibernate的映射对两列一列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在处理一些遗留的厂商code,我不能修改。我想用一个抽象层,更容易使用包数据库。

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

  TABLE [DBO]。[路径](
    [RouteID] [BIGINT] IDENTITY(1,1)NOT NULL,
    [SourceProcessID] [BIGINT] NOT NULL,
    [DestinationProcessID] [BIGINT] NOT NULL

TABLE [DBO]。[处理](
    [的ProcessID] [BIGINT] IDENTITY(1,1)NOT NULL
)
 

解决方案

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

 公共类流程
{
    公共虚拟IList的<路线> SourceRoutes {获得;组; }
    公共虚拟IList的<路线> DestinationRoutes {获得;组; }
}

公共类ProcessOverride:IAutoMappingOverride<处理>
{
    公共无效覆盖(自动映射<处理>映射)
    {
        mapping.HasMany(PROC => proc.SourceRoutes)。表(路由)KEYCOLUMN(的SourceID)。
        mapping.HasMany(PROC => proc.DestinationRoutes)。表(路由)KEYCOLUMN(DestID)。
    }
}
 

I'm dealing with some legacy vendor code that I can't modify. I'd like to wrap the database with an abstraction layer that is easier to use.

Given the following two tables, I need to create a mapping for Process.Route that will find the matching Route for a given Process, but that can be either dbo.Route.SourceProcessID or 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
)

解决方案

It's not elegant, but I finally came up with the following:

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

这篇关于流利的NHibernate的映射对两列一列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆