我正在使用遺留系統,並且正在將它移植到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大師任何提示,將不勝感激。
不要忘記分享您的問題當前狀態的更新:-) –