2012-06-28 36 views
5

Tôi có một Công ty thực thể có nhiều Đơn đặt hàng. Tôi lập bản đồ này như sau với nhau:NHibernate fluent HasMany ánh xạ chèn NULL Phím ngoài

Công ty

HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse(); 

tự

References(x => x.Company).Column("CompanyID") 

Tuy nhiên khi tôi tạo ra một trật tự mới cho công ty và cố gắng tiết kiệm nó, tôi nhận được một lỗi SQL : "Không thể chèn giá trị NULL vào cột 'CompanyID', bảng 'Đơn hàng'; cột không cho phép null. INSERT không thành công."

(đây là tuyên bố tạo ra SQL: INSERT INTO đặt hàng (Tên, CompanyID) VALUES (,); select SCOPE_IDENTITY()]]?)

Đó là một lỗi logic bởi vì thực sự tôi đặt CompanyID được không thể vô hiệu.

Tuy nhiên với nghịch đảo, tôi dự kiến ​​CompanyID sẽ được lấp đầy với ID thích hợp nhưng do cuộc sống của tôi, tôi không thể làm cho nó hoạt động. Tôi đã cố gắng loại bỏ nghịch đảo (hành vi không thay đổi gì cả), thay đổi tầng thác, đặt tham chiếu thành không có giá trị.

Tôi thậm chí còn làm cho cột có thể vô hiệu hóa trong bảng để làm hài lòng NHibernate. Nhưng điều đó đã để lại cho tôi một Lệnh mồ côi vì nó đã làm tạo bản ghi Đơn đặt hàng nhưng để lại CompanyID NULL.

Đây là testcode của tôi, nơi tôi làm cho trật tự mới:

Company test = RepositoryBase<Company>.GetById(1); 
test.Orders.Add(new Order("test")); 
RepositoryBase<Company>.SaveWithTransaction(test); 

cập nhật bằng cách đi tất cả tiền phạt.

Dù sao, tôi hy vọng một người nào đó ở đây sẽ thấy những gì tôi đã làm sai trong bản đồ của mình.

Xin cảm ơn trước.

Trả lời

4

bạn quên để thiết lập các công ty về trình tự

test.Orders.Add(new Order("test") { Company = test }); 

nghịch đảo chỉ nói với NH đó để sử dụng tài liệu tham khảo cho Công ty trên các đối tượng theo thứ tự để chèn Id.

2

Thêm mục này trước !!!

test.Orders.Add(new Order("test"){Company = test}); 
+1

.. w. h. y. ? .. – Tushar

+0

@Tushar Tôi không biết! Đừng nhớ. –

+0

O_O. Đó là lý do tại sao bạn nên giải thích mã trong câu trả lời. :) – Tushar

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