2012-06-14 104 views
1

我正在使用遗留系统,并且正在将它移植到nhibernate。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;} 
} 

在顺序表中, “客户” 列是一个标准的外键。

这意味着,在整个系统中,这些“实体”任何工作采用以下形式:

if (Order.Customer != null) 
{ 
    if (Order.Customer.Entity != null) 
    { 
     // Do stuff 
    } 
} 

经过大量的研究,我无法找到一个方法这些类映射方法将允许nhibernate的查询功能的正常使用。 我找到的最接近的解决方案是接口,它可能会解决我的映射问题,但对查询不起作用。

一些注意事项: 1)不幸的是,链接包装类的主要问题是在这里,我不能删除它,而不重写整个遗留基础设施。 2)我可以完全访问代码生成模板,并可以根据需要更改实体类结构。例如,要修复一个不同的主要问题,我为每个实体生成了一个类似poco的界面: public interface IOrder public ICustomer Customer {get;集;} ... }

public class Order : IOrder 
{ 
    ... 
    public Link<Customer> Customer {get; set;} 
    ICustomer IOrder.Customer 
    { 
     (Adapting code here) 
    } 
    ... 
} 

简而言之:从NH大师任何提示,将不胜感激。

回答

0

因为我无法评论,我会分享这个可以帮助你解决你的问题的link,我想你migth必须映射链接的所有可能的用途,但是你会有很多限制,因为这不是预期的对于NHibernate

+0

不要忘记分享您的问题当前状态的更新:-) –

相关问题