2009-06-23 24 views
5

Khi tôi xác định thực thể/ánh xạ NHibernate để sử dụng Guid làm cột nhận dạng, tôi nhận được một ngoại lệ. Cột Guid được tạo dưới dạng một varchar (40), nhưng nội dung có vẻ là nhị phân.Sử dụng cột Guid as Id trong NHibernate gây ra ngoại lệ định dạng khi sử dụng MySQL

Có giải pháp cho điều này không? Bây giờ tôi chỉ sử dụng int 'plain', nhưng nó sẽ là tốt đẹp để biết cho các dự án trong tương lai! :)

+0

Ngoại lệ là gì? Bạn đã tạo cột như varchar (40) hoặc đã NHibernate tạo lược đồ? –

+0

NHibernate đã tạo ra nó. Tôi không có ngoại lệ ngay bây giờ, nhưng nó là một ngoại lệ liên quan đến định dạng. – l3dx

Trả lời

7

MySQL Connector tài liệu nói rằng từ phiên bản 5.2 của .NET nối họ đối xử của GUID như Binary (16) không VARCHAR (40).

Kể từ phương ngữ MySQL hiện tại nhibernate không được cập nhật để phản ánh sự thay đổi này (trên thực tế an issue được chuẩn bị) bạn cần phải tự chuyển đổi các trường để Binary (16) sau khi nhibernate tạo giản đồ.

+0

Tôi đã nhận được điều tương tự trong vài ngày qua. đây là một cuộc sống thực sự tiết kiệm. –

5

Một cập nhật này là các kết nối mới nhất sử dụng Char (36)

Tùy chọn này đã được giới thiệu trong Connector/NET 6.1.1. Các đại diện phụ trợ của một loại GUID đã được thay đổi từ BINARY (16) thành CHAR (36). Điều này đã được thực hiện để cho phép các nhà phát triển sử dụng chức năng máy chủ UUID() để điền một bảng GUID - UUID() tạo ra một chuỗi gồm 36 ký tự. Các nhà phát triển ứng dụng cũ có thể thêm 'Old Guids = true' vào chuỗi kết nối để sử dụng GUID kiểu dữ liệu BINARY (16).

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