9

Dưới đây là các lớp mô hình miền:NHibernate lập bản đồ với một hệ thống phân cấp lớp có cơ sở lớp học là trừu tượng và bộ phân biệt không phải là một chuỗi

public abstract class BaseClass 
{ 
... 
} 

public class ChildClass : BaseClass 
{ 
... 
} 

Lưu ý rằng các tầng lớp phụ huynh là trừu tượng và đây là những gì mang lại cho tôi một số khó khăn khi đến thời gian để bản đồ với nhibernate thông thạo. Kẻ phân biệt đối xử của tôi là một byte (nhỏ xíu trong DB). Bởi vì nó không phải là một chuỗi và tôi không thể quản lý để thiết lập một giá trị phân biệt trên lớp cơ sở, điều này không làm việc (lấy từ các lớp bản đồ cho BaseClass):

DiscriminateSubClassesOnColumn<byte>("Type") 
    .SubClass<ChildClass>() 
    .IsIdentifiedBy((byte)OperationType.Plan) 
    .MapSubClassColumns(p => { ... }) 

Thông báo lỗi tôi nhận được là:

Phương thức khởi tạo lớp UnitTest1.MyClassInitialize đã ném ngoại lệ. NHibernate.MappingException: NHibernate.MappingException: Không thể định dạng giá trị phân biệt đối xử thành chuỗi SQL của thực thể BaseClass ---> System.FormatException: Chuỗi đầu vào không đúng định dạng ..

Bài sau dường như giải thích điều gì xảy ra. Họ đưa ra một giải pháp với xml nhưng không phải với nhibernate thông thạo: http://forum.hibernate.org/viewtopic.php?t=974225

Cảm ơn sự giúp đỡ.

+0

Cảm ơn bạn đã liên kết đến giải pháp với XML - chính xác những gì tôi cần! –

Trả lời

12

Tôi đã tìm thấy một workaround nhưng điều này dường như giống như một miếng vá ... tôi đã thêm dòng sau vào tập tin bản đồ:

SetAttribute("discriminator-value", "-1"); 

Dường như để hướng dẫn FNH không sử dụng một chuỗi (Tôi nghĩ rằng nó sử dụng tên lớp) cho lớp cơ sở trừu tượng. Để làm cho nó hoạt động với giá trị -1, tôi cũng đã thay đổi loại phân biệt đối xử của tôi từ byte thành sbyte.

Chỉnh sửa: Tôi bỏ lỡ: đây là tham số thứ hai để phân biệt đối xửSubClassesOnColumn lấy giá trị mặc định. Vì vậy, câu trả lời đúng cho câu hỏi của tôi là:

DiscriminateSubClassesOnColumn<sbyte>("Type", (sbyte)-1) 
+0

Cảm ơn rất nhiều - Tôi đã có một vấn đề tương tự với người phân biệt đối xử không phải là một chuỗi. – Ted

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