2012-06-14 126 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

不要忘記分享您的問題當前狀態的更新:-) –

相關問題