NHibernate-在遗留系统中映射自定义引用类型

NHibernate-在遗留系统中映射自定义引用类型,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我正在开发遗留系统,并且正在将其移植到nhibernate 该系统基于生成的“实体”C#类, 以及一个数据访问基础设施,该基础设施基于在一个特殊的“链接”类中包装跨实体引用。这是一个错误的尝试,试图实现延迟加载,这在实践中弊大于利 例如: public class Order { public Guid Id { get; protected set;} public int Total {get; set;} public Link<Customer> Cu

我正在开发遗留系统,并且正在将其移植到nhibernate

该系统基于生成的“实体”C#类, 以及一个数据访问基础设施,该基础设施基于在一个特殊的“链接”类中包装跨实体引用。这是一个错误的尝试,试图实现延迟加载,这在实践中弊大于利

例如:

public class Order
{
    public Guid Id { get; protected set;}
    public int Total {get; set;}
    public Link<Customer> Customer {get; set;}
}

public class Customer
{
    public Guid Id { get; protected set;}
    public string Name {get; set;}
}

public class Link<T>
{
   ... Snip ...
   public T Entity { get; private set;}
}
经过大量的研究,我找不到一种方法来映射这些类,使其能够合理地使用nhibernate的查询功能。 我找到的最接近的解决方案是IPropertyAccessor接口,它可能会解决我的映射问题,但不会很好地处理查询

请注意: 1) 不幸的是,链接包装器类的主要问题仍然存在,我无法在不重写整个遗留基础设施的情况下删除它。 2) 我可以完全访问代码生成模板,并且可以根据需要更改实体类结构。例如,为了解决不同的主要问题,我为每个实体生成了一个类似poco的接口: 公共接口路由器 { 公共iccustomer客户{get;set;} ... }

公共类顺序:IOrder
{
...
公共链接客户{get;set;}
ICustomer IOrder.客户
{
(此处修改代码)
} 
...
}

简言之:NH gurus的任何提示都将不胜感激。

由于我无法发表评论,我将与您分享这篇文章,以帮助您解决您的问题,我认为您可能需要映射链接的所有可能用途,但是您会有很多限制,因为这不是NHibernate所期望的

不要忘记分享您的问题当前状态的更新:-)
if (Order.Customer != null)
{
    if (Order.Customer.Entity != null)
    {
        // Do stuff
    }
}
public class Order : IOrder
{
    ...
    public Link<Customer> Customer {get; set;}
    ICustomer IOrder.Customer
    {
       (Adapting code here)
    } 
    ...
}