11

Tôi đã có một lớp cơ sở trừu tượng và các thực thể poco kế thừa. Tôi đang sử dụng bảng cho mỗi thừa kế lớp con với tự động hóa nhibernate 1.1 tự động.Vấn đề với các proxy đúc khi sử dụng bảng NHibernate cho mỗi chiến lược thừa kế lớp con

Việc thừa kế lớp trông giống như sau

Node (abstract class) Địa điểm: Node Asset: Node

lớp Node cơ bản là một cấu trúc cây.

public abstract class Node 
    { 
     public virtual int Id 
     { 
      get; 
      set; 
     } 

     public virtual Node ParentNode 
     { 
      get; 
      set; 
     } 

     public virtual ICollection<Node> ChildNodes 
     { 
      get; 
      set; 
     } 
} 

Bây giờ vấn đề là khi tôi nhận được một đối tượng của tài sản từ cơ sở dữ liệu và làm objAsset.ParentNode, tôi có thể đúc ParentNode để Asset hoặc Place, nhưng nếu tôi làm điều gì đó như objAsset.ParentNode.ParentNode.ParentNode, thì ParentNode xuất hiện dưới dạng "{Castle.Proxies.NodeProxy}" và tôi không thể truyền nó tới Địa điểm hoặc Nội dung.

Tôi biết rằng trong trường hợp của tôi kết quả cuối cùng phải là loại Place, vì bản ghi tồn tại trong cơ sở dữ liệu trong bảng địa điểm nhưng vì một số lý do NHibernate không thể tải nó xuống loại thực tế, nó chỉ có thể cast tới lớp cơ sở Node.

Bất kỳ ý tưởng nào?

Đang chờ Nabeel

Trả lời

15

này được giải thích bởi Oren đây: http://ayende.com/Blog/archive/2009/09/03/answer-the-lazy-loaded-inheritance-many-to-one-association-orm.aspx

Tóm lại, proxy thừa hưởng từ loại của hiệp hội, không phải là loại di truyền, bởi vì đó không được biết đến trước khi đi DB (và bạn không thể thay đổi kiểu của một đối tượng)

cập nhật: a workaround có thể bị rò rỉ một tham chiếu đến đối tượng thực tế trong Node:

0.123.
public virtual Node Self { get { return this; } } 

Điều đó sẽ cung cấp cho bạn Nội dung hoặc Địa điểm cơ bản. Hãy cẩn thận với nó.

+3

Ngoài ra, như đã nêu trong bài viết; một giải pháp là vô hiệu hóa tải lười biếng trên các hiệp hội, mà sẽ cung cấp cho bạn các đối tượng thực tế. – DanP

+0

Xem thêm workaround –

+0

nhờ deigo ... thats làm việc ra tuyệt vời. Điều duy nhất là tôi phải bỏ qua thuộc tính Tự trong bản đồ. – nabeelfarid

Các vấn đề liên quan