2016-01-27 25 views
9

Tôi đang sử dụng System.Data.Sqlite 1.0.99 từ C#, với nó bạn có thể gọi đến db với EF. Tôi phải đối mặt với vấn đề này khi chọn FirstOrDefault bởi Guid nó trở null (nhưng chèo với guid như vậy tồn tại trong cơ sở dữ liệu):So sánh so sánh System.Data.Sqlite 1.0.99 không hoạt động

var user = context.Users.FirstOrDefault(x => x.Id == userId); //returns null 
//or 
var user = context.Users.Where(x => x.Id == userId).ToArray(); //returns empty array 

Tìm thấy một số thông tin rằng đây được biết đến vấn đề và nó đã được cố định ở 1.0.95, nhưng bị phá vỡ một lần nữa trong 1.0.97 và hai giải pháp tiếp theo:

giải pháp 1: thiết lập các tài sản trên các chuỗi kết nối BinaryGUID true:

Data Source=...;BinaryGUID=True; 

giải pháp 2: thiết lập biến môi trường tiếp theo (trước khi bạn thực hiện kết nối):

Environment.SetEnvironmentVariable("AppendManifestToken_SQLiteProviderManifest", ";BinaryGUID=True;"); 

Giải pháp 2 tác phẩm, bởi vì (từ trang web sql):

AppendManifestToken_SQLiteProviderManifest - Nếu biến môi trường này được thiết lập [để bất cứ điều gì], nó sẽ được sử dụng bởi các System.Data .SQLite.Linq.SQLiteProviderManifest lớp (và lớp System.Data.SQLite.EF6.SQLiteProviderManifest) để sửa đổi mã thông báo của nhà cung cấp trong tương lai bằng cách gắn thêm giá trị của biến môi trường vào mã thông báo nhà cung cấp hiện có, nếu có. Thông thường, để mã thông báo của nhà cung cấp được xây dựng có cú pháp chính xác, giá trị biến môi trường [được nối thêm] phải bắt đầu bằng dấu chấm phẩy.

Giải pháp 1 không hoạt động đối với tôi vì, như tôi hiểu, nó chỉ có tác dụng trên System.Data.SQLite.Linq.SQLiteProviderManifest.

Câu hỏi: Có giải pháp nào để khắc phục hành vi này không phải để đặt biến môi trường không?

+1

Tôi xác nhận đây vẫn là sự cố với System.Data.SQLite v1.0.104.0. Giải pháp 1 không hoạt động và giải pháp 2 hoạt động. Thêm dòng này trong hàm tạo của một lớp một phần trên đối tượng Entity của tôi không hoạt động, cảm ơn! Nếu bạn đã tìm thấy một giải pháp khác, xin vui lòng đăng bài, nhưng bây giờ là đủ tốt. –

+0

Tôi vui vì câu hỏi/giải pháp của tôi rất hữu ích. Cảm ơn bạn đã trả lời! –

Trả lời

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