PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cốt lõi của Entity Framework - Chứa phân biệt chữ hoa chữ thường hay không phân biệt chữ hoa chữ thường?

Nó từng là trường hợp cho các phiên bản cũ hơn của lõi EF. Bây giờ string.Contains có phân biệt chữ hoa chữ thường và đối với exemple cho sqlite, nó ánh xạ tới hàm sqlite `direction () '(tôi không biết đối với postgresql).

Nếu bạn muốn so sánh các chuỗi theo cách không phân biệt chữ hoa chữ thường, bạn có DbFunctions để thực hiện công việc.

context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();

CẬP NHẬT lên @Gert:

Một phần của giả định trong câu hỏi là không chính xác. string.Contains KHÔNG chuyển đổi thành LIKE expression mặc dù nó ĐƯỢC SỬ DỤNG là trường hợp trong các phiên bản ef core <=1.0 (tôi nghĩ).

  • Trong SQLServer string.contains chuyển đổi thành CHARINDEX() , trong oracle và sqlite thành instr() phân biệt chữ hoa chữ thường theo mặc định UNLESS db hoặc đối chiếu cột được định nghĩa khác (Xin nhắc lại, tôi không biết đối với postgresql).
  • Trong mọi trường hợp EF.Functions.Like() chuyển đổi thành một LIKE trong SQL theo mặc định, biểu thức không phân biệt chữ hoa chữ thường trừ khi đối chiếu db hoặc cột được định nghĩa theo cách khác.

Vì vậy, vâng, tất cả sẽ đi đến đối chiếu nhưng - hãy sửa cho tôi nếu tôi sai - theo cách mà mã có thể ảnh hưởng đến tìm kiếm phân biệt chữ hoa chữ thường / không nhạy cảm tùy thuộc vào phương pháp bạn sử dụng.

Bây giờ, tôi có thể không hoàn toàn cập nhật nhưng tôi không nghĩ rằng việc di chuyển lõi EF đối phó với đối chiếu DB một cách tự nhiên và trừ khi bạn đã tạo bảng theo cách thủ công, bạn sẽ kết thúc với đối chiếu mặc định (phân biệt chữ hoa chữ thường đối với sqlite và tôi thành thật mà nói thì không biết cho những người khác).

Quay lại câu hỏi ban đầu, bạn có ít nhất 2 lựa chọn để thực hiện tìm kiếm không phân biệt chữ hoa chữ thường này nếu không phải là 3 trong một bản phát hành trong tương lai:

  1. Chỉ định đối chiếu cột khi tạo bằng DbContext.OnModelCreating () bằng thủ thuật này
  2. Thay thế chuỗi string.Contains của bạn bởi EF.Functions.Like()
  3. Hoặc đợi một tính năng đầy hứa hẹn vẫn đang được thảo luận:EF.Functions.Collate() chức năng


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể CHÈN:LỖI:giá trị mảng phải bắt đầu bằng {hoặc thông tin về thứ nguyên

  2. Rails 3, ActiveRecord, PostgreSQL - Lệnh .uniq không hoạt động?

  3. Giải thích chi tiết hơn về đề xuất hiệu suất điều kiện JOIN so với LEFT JOIN và WHERE

  4. Cách chọn bản ghi từ 24 giờ qua trong PostgreSQL

  5. Cách make_date () hoạt động trong PostgreSQL