8

Tôi đang cố gắng hoàn thành một số bước đầu tiên với chế độ nhanh nhibernate với máy chủ sql express, để thêm các tính năng này vào dự án của tôi. Nhưng có một số lỗi. Vì tôi là người mới đến nhibernate, không thể giải quyết một vấn đề trong một thời gian. Tôi có một pháp nhân vớiThông báo lỗi thiết lập riêng về lỗi máy chủ Siber Server và Sql Server

Id { get; private set; } 

người truy cập. Và thực thể này được ánh xạ tới bảng với cột nhận dạng {1,1} trong máy chủ sql. Nhưng trong tạo nhà máy phiên, tôi nhận được một lỗi:

The following types may not be used as proxies:Entity: method set_Id should be 'public/protected virtual' or 'protected internal virtual' 

Tôi hiểu rằng setter tin được sử dụng để đóng gói cài đặt của khách sạn này, nhưng tại sao tôi nhận được lỗi này sau đó? PS: ví dụ trên trang web thông thạo cho nhibernate đang sử dụng db sqllite và mọi thứ đều ổn.

Trả lời

20

Đây là một vấn đề mà đã gây ra nỗi đau cho nhiều người dùng NH/FNH, trong đó có tôi .

Cho đến gần đây, NHibernate đã cho phép người định cư riêng tư với các đối tượng proxy. Nhưng bắt đầu bằng NH 3.2, người định cư riêng không còn được phép - họ phải là "'công cộng/được bảo vệ ảo' hoặc 'bảo vệ nội bộ ảo'", như thông báo lỗi cho biết.

Đây là thay đổi đột phá đối với nhiều mã mẫu FNH/NH ở ngoài đó và đặc biệt gây nhầm lẫn cho người mới.

+0

Đánh dấu câu trả lời của bạn, nó gần hơn với câu hỏi của tôi. Cảm ơn. –

7

Khai báo thuộc tính là public virtual int Id { get; protected set; }. Đối tượng proxy được tạo ra bởi NHibernate sau đó sẽ có thể thiết lập thuộc tính.

Một giải pháp khác có thể được sử dụng một lĩnh vực sao lưu:

private int id; 
public int Id 
{ 
    get { return id; } 
} 

Và sau đó sử dụng bản đồ:

Map(x => x.Id).Access.CamelCaseField(); 
+0

CamelCaseField được sử dụng để làm gì? Liệu nó tự nhận ra functinality autoproperty? –

+0

CamelCaseField hướng dẫn NHibernate sử dụng sự phản chiếu để đặt trường riêng tư, thay vì một thuộc tính công khai. –

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