2009-06-20 35 views
7

đưa ra định nghĩa lớp sau đây:Làm thế nào để bạn ánh xạ một thực thể -> mối quan hệ giao diện sử dụng Fluent NHibernate?

public class Order { 
    public IProduct Product {get;set;} 
} 

Tôi có điều này (thông thạo) lập bản đồ

References(x=>x.Product, "ProductId"); 

Và có được ngoại lệ này: Một liên kết từ các đơn đặt hàng bảng đề cập đến một lớp unmapped, có ý nghĩa vì nó không biết tôi sẽ thực hiện điều gì.

Tôi hiểu tại sao tôi phải xác định loại trong ánh xạ (IProduct có thể là bất cứ điều gì) nhưng tôi không chắc chắn làm thế nào để làm điều đó.

Cảm ơn,

Kyle

Trả lời

2

Cố gắng lập bản đồ giao diện IProduct thay cho lớp bê tông Product. (Lưu ý, tôi không nói về ánh xạ trường Product của lớp Order.)

1

Bạn có thể ánh xạ mối quan hệ giao diện- thực hiện dưới dạng quan hệ kế thừa, sử dụng mô hình kế thừa thích hợp.

Điều đó có nghĩa là ánh xạ IProduct và sau đó tạo bản đồ lớp con của Sản phẩm trong ánh xạ IProduct, ví dụ: sử dụng bảng trên mỗi phân cấp.

Điều đó cũng sẽ cho phép bạn ánh xạ dữ liệu bổ sung trong lớp sản phẩm không thuộc giao diện IProduct và cũng cho phép bạn ánh xạ các triển khai IProduct bổ sung theo cách tương tự nếu bạn muốn.

1

Tôi đã làm việc để cải thiện hỗ trợ cho giao diện proxy trong chế độ Lưu loát. Có một vài bản vá hữu ích gắn liền với các vấn đề 256 và 257, nhưng chúng thực sự cần mọi thứ được chỉ định theo cách thủ công. Tôi đã thực hiện thêm một bước nữa và thêm hỗ trợ cho việc thiết lập proxy và thay đổi các kiểu tham chiếu từ suy luận (đó sẽ là proxy) thành lớp được ánh xạ bên dưới, và thêm một quy ước mới (ProxyConvention) để thiết lập nó tự động - chỉ cần khởi tạo nó với một hàm để lấy ra giao diện proxy từ một lớp được ánh xạ và nó sẽ xử lý phần còn lại.

Một lỗ hổng tại thời điểm này là nó không thể nhận bất kỳ định nghĩa nào được chỉ định rõ ràng trong tệp .hbm.xml.

Các miếng vá được gắn vào issue 256

5

Tôi nghĩ rằng những gì bạn đang tìm kiếm là .References<Product>(x=>x.Product, "ProductId");

Ngẫu nhiên cùng là đúng đối với .HasMany<>

Điều này dường như làm tương tự như <... class="Product" /> trong xml

Tôi không khuyên bạn nên ánh xạ tới giao diện vì nó phá vỡ toàn bộ điểm sử dụng một - bạn gặp sự cố ngay sau khi bắt đầu triển khai IStorable và NH không thể đối phó với đa thừa kế.

+0

Cảm ơn câu trả lời này - Tôi thấy nó rất hữu ích và là phương pháp tôi đã chọn – Mike

+0

Tại sao loại 'Câu hỏi'? – UpTheCreek

+0

Rất tiếc, cuộc gọi tốt, tôi đã thay đổi nó, đó là lỗi sao chép và dán. – Stu

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