2009-03-30 22 views
49

Tôi có ánh xạ dọc theo các dòng này.nHibernate, Không có hàng có số nhận dạng đã cho tồn tại

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Model.Entities" schema="etl" assembly="Model" default-lazy="false"> 
    <class name="Model.Entities.DataField, Model" table="mdm_field"> 
    <id name="FieldId" column="field_id" type="int"> 
     <generator class="native" /> 
    </id> 
    <many-to-one name="KeyField" class="Model.Entities.Key, Model" column="field_id" /> 
    </class> 
</hibernate-mapping> 

Bây giờ trong cơ sở dữ liệu các FIELD_ID trong bảng mdm_field đôi khi có một giá trị không tồn tại trong bảng key_field liên quan, vì vậy nó được về cơ bản bị phá vỡ tính toàn vẹn tham chiếu. Bởi vì điều này khi tôi tải các thực thể tôi nhận được một lỗi "Không có hàng với các định danh nhất định tồn tại". Làm thế nào để cấu hình ánh xạ để làm việc với tình huống này để nó sẽ không chết trên tình huống này.

+0

tôi có các bản đồ tương tự, bạn có biết làm thế nào để tìm thấy tất cả các mô hình mà không KeyField? –

Trả lời

75

Ok, tôi đã tìm thấy câu trả lời. Thêm thuộc tính

not-found="ignore" 

đến tài sản KeyField:

<many-to-one name="KeyField" not-found="ignore" class="Model.Entities.Key, Model" column="field_id" /> 
+2

Điều này cũng làm tôi bực mình. Đối với chú thích, hãy sử dụng @NotFound (action = NotFoundAction.IGNORE). – NobodyMan

+5

Tôi đang gặp sự cố tương tự với Fluent NHibernate. Ted, nếu bạn có thể chỉ ra một sửa chữa thích hợp, tôi sẽ rất cảm kích. FWIW, đưa .NotFound.Ignore() trên KeyField không giúp gì cho trường hợp của tôi. – BobC

+1

@Ted Care để giải thích tại sao nó không phải là giải pháp hợp lệ? –

4

Trong trường hợp của tôi vấn đề đã được vì một ràng buộc khoá ngoại đã không được thi hành bởi động cơ MyISAM và do đó một trong những hàng đã kết thúc trỏ đến một giá trị không tồn tại và proxy đã ném một ngoại lệ. Tôi khuyên bạn nên kiểm tra tập dữ liệu của mình là nhất quán trong trường hợp này.

4

Hãy thử điều đó ...

public void Override(ModelMapper modelMapper) { 
    modelMapper.Class<T>(c => { 
     c.ManyToOne(m => m.FKObj, r => { 
      r.Column("FKColumn"); 
      r.NotFound(NotFoundMode.Ignore); // THIS IS IMPORTANT!!! 
     }); 
    }); 
} 
Các vấn đề liên quan