Tôi đã sử dụng thành công NHibernate trong một thời gian và đã có thể giải quyết được nhiều cạm bẫy với một ứng dụng mà tôi được phát triển cùng với nó và đang chạy trong sản xuất. Các rào cản gần đây thực sự có tôi gãi đầu của tôi, mặc dù."Chỉ mục không hợp lệ n cho SqlParameterCollection này với Count = n" HOẶC "khóa ngoại không thể rỗng"
Gần đây tôi đã phải mở rộng thư viện lớp học với một số lớp học mới mà được lồng vào nhau như trẻ em đối với một số lớp đã tồn tại. Tôi vừa sao chép cùng một mô hình cho ánh xạ tổng hợp mà tôi đã thành công bằng cách sử dụng, nhưng lần này nó không hoạt động.
Bây giờ khi tôi sử dụng sau đây trong tập tin bản đồ mẹ:
<bag name="SeaInfoItems" table="EDIImport_SeaInfo" lazy="false" cascade="save-update">
<key column="EDI_FK_OWNERID"/>
<one-to-many class="FargoGate.AppLib.EdiImportSeaInfo, FargoGate.AppLib"/>
</bag>
tôi có thể chọn, trong lớp trẻ, hoặc là sử dụng:
<property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" />
... mà mang lại cho tôi "Chỉ số không hợp lệ n" khét tiếng cho số lỗi SqlParameterCollection với Count = n "này.
HOẶC tôi cố gắng với giải pháp này tôi tìm thấy sau khi một số Googling:
<property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" insert="false" update="false" />
... mà mang lại cho tôi một "Không thể chèn các giá trị NULL vào cột 'EDI_FK_OWNERID' ... cột không cho phép null . " lỗi.
Vì vậy, về cơ bản tôi phải lựa chọn giữa sâu bệnh và dịch tả.
Những gì tôi không nhận được là nó hoạt động hoàn hảo cho các lớp tổng hợp hiện có đã tồn tại và tôi thực sự không thể phát hiện sự khác biệt. Điều duy nhất là khóa ngoại này (EDI_FK_OWNERID) có thể tham chiếu đến hai bảng phụ huynh khác nhau . Thiết kế cơ sở dữ liệu xấu, tôi biết, nhưng tôi không thiết kế nó, và đó là nhiệm vụ của tôi để phát triển nó cho tốt hơn hoặc tồi tệ hơn. Tôi không thể thay đổi thiết kế cơ sở dữ liệu.
Sự khác biệt khác là tôi đã xóa hoàn toàn tham chiếu khóa ngoài khỏi các lớp con hiện có (ánh xạ cũng như các thành viên lớp). Tôi đã cố gắng thi đua tất nhiên, nhưng vô ích.
Ngoài ra tôi phát hiện ra rằng một trong các lớp mới (khá nhỏ) cũng hoạt động tốt. Nhưng tôi không thể thấy sự khác biệt ở đây là gì. Tôi đang bối rối!
Bất kỳ ai cũng có một đầu mối?
thực sự là chỉ mục không hợp lệ n ... ngoại lệ có thể dẫn bạn đến thẳng http: // stackoverflow.com/questions/2298026/indexoutofrangeexception-deep-in-the-ruột-of-nhibernate/2311256 # 2311256 – Jaguar