我正在使用遗留系统,并且正在将它移植到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大师任何提示,将不胜感激。
不要忘记分享您的问题当前状态的更新:-) –