NHibernate-在遗留系统中映射自定义引用类型
我正在开发遗留系统,并且正在将其移植到nhibernate 该系统基于生成的“实体”C#类, 以及一个数据访问基础设施,该基础设施基于在一个特殊的“链接”类中包装跨实体引用。这是一个错误的尝试,试图实现延迟加载,这在实践中弊大于利 例如: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
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)
}
...
}