Cập nhật tháng 2 năm 2021
Rõ ràng EF Core hiện hỗ trợ ulong
- xem câu trả lời của @ JimbobTheSailor bên dưới.
Phiên bản Khung đối tượng cũ hơn:
Hóa ra rằng Entity Framework không hỗ trợ unsigned
Loại dữ liệu. Đối với uint
, người ta chỉ có thể lưu trữ giá trị trong kiểu dữ liệu đã ký với phạm vi lớn hơn (nghĩa là long
). Còn về ulong
cột? Giải pháp chung không thể hoạt động đối với tôi vì không có loại dữ liệu đã ký nào được EF hỗ trợ có thể chứa ulong
mà không bị tràn.
Sau một hồi suy nghĩ, tôi đã tìm ra một giải pháp đơn giản cho vấn đề này:chỉ cần lưu trữ dữ liệu trong long
được hỗ trợ nhập và truyền nó tới ulong
khi được truy cập. Bạn có thể đang nghĩ:"Nhưng khoan đã, giá trị tối đa của ulong> giá trị tối đa của long!" Bạn vẫn có thể lưu trữ các byte của một ô dài và sau đó chuyển nó trở lại thành ô dài khi bạn cần, vì cả hai đều có 8 byte. Điều này sẽ cho phép bạn lưu một biến dài vào cơ sở dữ liệu thông qua EF.
// Avoid modifying the following directly.
// Used as a database column only.
public long __MyVariable { get; set; }
// Access/modify this variable instead.
// Tell EF not to map this field to a Db table
[NotMapped]
public ulong MyVariable
{
get
{
unchecked
{
return (ulong)__MyVariable;
}
}
set
{
unchecked
{
__MyVariable = (long)value;
}
}
}
Quá trình truyền unchecked
để ngăn chặn các ngoại lệ tràn.
Hy vọng điều này sẽ giúp ai đó.