2009-02-16 38 views
15

Tôi có các lớp Đăng và Bình luận, và chúng có mối quan hệ một đến nhiều mà Bài đăng có một danh sách các Nhận xét. Làm thế nào tôi có thể bản đồ này như là một mối quan hệ uni-directional với Fluent NHibernate, kể từ khi một bình luận không cần phải biết phụ huynh của nó Đăng? Hiện nay, đây là bản đồ của tôi cho Comment:Lưu loát NHibernate một đến nhiều ánh xạ một chiều

Id(x => x.Id); 
Map(x => x.Body); 
References(x => x.User); 

và chất lượng Bưu chính:

Id(x => x.Id); 
Map(x => x.Title); 
HasMany(x => x.Comments) 
    .Inverse() 
    .WithKeyColumn("PostId") 
    .Cascade.AllDeleteOrphan(); 

doesnt làm việc này bởi vì khi tôi cố gắng tiết kiệm một trường hợp bài viết với một Nhận xét mới được bổ sung, các khoá ngoại trên Comment (PostId) là trái NULL. Và tất nhiên một bình luận không thể được lưu với một NULL PostId. Tôi đã thử loại bỏ các .Inverse khoản(), nhưng điều đó không hoạt động hoặc.

+3

Tự mình tham gia. IMO rất khó chịu. –

+1

Có thể với NH3.1 trở lên, hãy xem câu trả lời của tôi cho một câu hỏi simmilar khác http://stackoverflow.com/questions/4466153/nhibernate-configuration-for-uni-directional-one-to-many-relation/7601312# 7601312 – hazzik

Trả lời

22

NHibernate không hỗ trợ ánh xạ này khi bạn có một ràng buộc không null trên khóa ngoài của bạn. Nếu bạn loại bỏ ràng buộc đó, bạn sẽ thấy NHibernate chèn các chú thích với một PostId rỗng, sau đó cập nhật chúng với Id của bài viết mới.

Bạn có thể cần phải:

  1. Hủy bỏ các hạn chế không null các Inverse gọi
  2. Giữ hạn chế, và bản đồ ở phía bên kia của mối quan hệ (làm cho một mối quan hệ hai chiều và cho phép Inverse hoạt động chính xác)

Điều này được bao gồm trong NHibernate documentation for one-to-many's, xem Lưu ý rất quan trọng ở cuối.

+0

liên kết bị hỏng, fyi. –

+1

Không phải vậy. Trang web có thể tạm thời ngừng hoạt động nhưng liên kết chắc chắn vẫn hợp lệ. –

+1

Cảm ơn câu trả lời. Đó là một NH xấu hổ hoạt động theo cách này, tôi không thấy lý do tại sao nó nên. –

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