2008-10-15 25 views
6

Tôi tiếp tục nhận được một NHibernate.PersistentObjectException khi gọi session.Save() mà là do một proxy uninitialized thông qua để lưu(). Nếu tôi fiddle với các thiết lập cascade của tôi, tôi có thể làm cho nó biến mất, nhưng sau đó các đối tượng con không được lưu lại.NHibernate: uninitialized proxy thông qua để lưu() và cascade

Sửa lỗi duy nhất khác mà tôi đã tìm thấy là bằng cách thêm phần sau vào DefaultSaveEventListener của tôi.

protected override bool ReassociateIfUninitializedProxy(object obj, global::NHibernate.Engine.ISessionImplementor source) 
    { 
     if (!NHibernateUtil.IsInitialized(obj)) 
      NHibernateUtil.Initialize(obj); 

     return base.ReassociateIfUninitializedProxy(obj, source); 
    } 

Đây rõ ràng không phải là giải pháp lý tưởng.

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

+0

Bạn đã bao giờ tìm thấy giải pháp tốt hơn cho điều này chưa? Hiện tại tôi đang sử dụng cách tiếp cận mà bạn đã đề cập đè lên ReassociateIfUninitializedProxy. –

+0

Tôi chưa tìm thấy giải pháp nào ... – jonnii

+0

bạn có thấy vấn đề này với các đối tượng allyour hoặc một đối tượng cụ thể không. nếu một đối tượng cụ thể của nó, bạn có thể cập nhật câu hỏi với mô hình và ánh xạ của bạn không? – Baz1nga

Trả lời

2

Bạn đang cố gắng làm việc với đối tượng con nằm trong danh sách trên thực thể tổng hợp gốc chưa? Nếu bạn đang có, bạn cần phải làm việc với gốc, đi ngang qua đứa trẻ, thực hiện các thay đổi và lưu gốc, không phải là con.

+0

Tôi không làm việc trên dự án đó nữa, nhưng tôi nghĩ đó có thể là nguyên nhân. – jonnii

2

Tôi gặp sự cố tương tự.

Việc sửa chữa rất đơn giản: use ISession.Get() và không ISession.Load()

+0

tăng, tăng từ cõi chết! – Jaguar

+0

Tôi nhận được lỗi này và tôi không có tham chiếu đến ISession.Load hoặc bất kỳ sự quá tải nào của nó. – Rabid

4

Có chỉ sự hiện diện của một phong tục DefaultSaveEventListener lớp con không chứa hành vi overidden hoặc mở rộng là đủ để gây ra ngoại lệ này đối với tôi, bằng cách sử dụng Xml cấu hình sau:

<event type="save-update"> 
    <listener class="MyNamespace.MyCustomSaveEventListener, MyAssembly" /> 
</event> 

Tôi đang tiếp tục cuộc thảo luận này in this question.

Cập nhật:

tôi đã nhầm lẫn bắt nguồn từ DefaultSaveEventListener thay vì DefaultSaveOrUpdateEventListener, thay đổi lớp cha làm vấn đề này đi cho tôi.

+2

Ahh ngu ngốc tôi tôi đã bắt nguồn từ 'DefaultSaveEventListener' thay vì' DefaultSaveOrUpdateEventListener', việc thay đổi siêu lớp làm cho vấn đề này biến mất. – Rabid

+0

+1 - Đây là nguyên nhân - và sửa lỗi - để tôi nhận được lỗi này. Tôi muốn đề xuất di chuyển nhận xét của bạn cho câu trả lời của bạn, vì điều đó hữu ích và lý do chính xác khiến một người nào đó gặp phải lỗi này. –

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