2009-12-29 23 views
7

tôi có một đối tượng Diện tích trong đó có nhiều trẻ em tiểu vùng:NHibernate lưu/cập nhật các thính giả sự kiện: nghe cho đối tượng trẻ em tiết kiệm

public class Area 
{ 
    ... 
    public virtual IList<SubArea> SubAreas { get; set; } 
} 

anh trẻ em được ánh xạ như một mối quan hệ uni-directional phi nghịch đảo:

public class AreaMapping : ClassMap<Area> 
{ 
    public AreaMapping() 
    { 
     HasMany(x => x. SubAreas).Not.Inverse().Cascade.AllDeleteOrphan(); 
    } 
} 

Khu vực là gốc tổng hợp của tôi. Khi tôi lưu một khu vực (ví dụ: Session.Save (khu vực)), khu vực được lưu và SubAreas con sẽ tự động cascaded.

Tôi muốn thêm trình lưu sự kiện để lưu hoặc cập nhật để nắm bắt bất cứ khi nào các khu vực của tôi và/hoặc subareas được lưu giữ. Nói ví dụ tôi có một khu vực, trong đó có 5 SubAreas. Nếu tôi móc vào SaveEventListeners:

Configuration.EventListeners.SaveEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 

Khi tôi tiết kiệm diện tích, myListener chỉ bắn lần chỉ dành cho khu vực (SubAreas được bỏ qua). Tôi muốn 5 SubAreas bị bắt gặp trong người nghe sự kiện. Nếu tôi móc vào SaveOrUpdateEventListeners thay vì:

Configuration.EventListeners.SaveOrUpdateEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 

Khi tôi tiết kiệm diện tích, myListener là không bắn vào tất cả. Kỳ lạ thay, nếu tôi móc vào SaveEventListeners SaveOrUpdateEventListeners:

Configuration.EventListeners.SaveEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 
Configuration.EventListeners.SaveOrUpdateEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 

Khi tôi tiết kiệm diện tích, myListener là bắn 11 lần: một lần cho khu vực này, và hai lần cho mỗi tiểu vùng! (Tôi nghĩ vì NHIbernate là INSERTing SubArea và sau đó UPDATING với khóa ngoài khu vực).

Có ai biết tôi đang làm gì sai ở đây hay không và cách tôi có thể khiến người nghe kích hoạt một lần cho từng khu vực và khu vực phụ?

+0

bạn có làm việc này không? gặp vấn đề tương tự – andy

+0

Tôi cũng thế! Có ai tìm ra giải pháp không? – nozzleman

Trả lời

0

Không 100% liên quan đến câu hỏi của bạn nhưng nếu bạn ánh xạ ngược lại "đúng" trên bộ sưu tập của mình, bạn sẽ không nhận được các câu lệnh cập nhật AND.

+0

Đúng, nhưng tôi nghĩ rằng điều này sẽ yêu cầu làm cho mối quan hệ đơn hướng trong mô hình đối tượng (SubArea sẽ có tham chiếu đến Area aswell) nhưng trong trường hợp này tôi không muốn hoặc cần điều đó. –

+0

Nó chắc chắn sẽ là cách dễ nhất để giải quyết vấn đề. @ JamesAllen - Tại sao bạn không muốn một nhiều-một từ SubArea đến khu vực? –

0

NH phát hành câu lệnh INSERT để biết Id của đối tượng nếu không biết (IDENTITY hoặc SEQUENCE chẳng hạn).

Vì vậy, nếu bạn muốn vô hiệu hóa bạn cần sử dụng trình tạo id không yêu cầu roundtript cho DB (chẳng hạn như guid hoặc guid.combo).

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