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

Truy vấn EF tới Oracle ném ORA-12704:bộ ký tự không khớp

Cuối cùng, tôi đã yêu cầu tác giả của điều này (Trình điều khiển được quản lý ODP.Net - ORA-12704:bộ ký tự không khớp trong mã được tạo) để cập nhật câu hỏi, anh ta đã đăng một cách giải quyết bằng cách sử dụng bộ đánh chặn, tôi sẽ đi chi tiết hơn một chút ở đây .. .

Đầu tiên, tôi trang trí DBContext của mình để tải cấu hình. bạn có thể bỏ qua điều này và chỉ cần thêm vào cấu hình của mình nếu bạn có:

[DbConfigurationType(typeof(MyDbConfiguration))]
public partial class MyContext : DbContext

Tạo lớp cấu hình:

public class MyDbConfiguration : DbConfiguration
{
    public MyDbConfiguration()
    {
        this.AddInterceptor(new NVarcharInterceptor()); //add this line to existing config.
    }
}

Tiếp theo, tạo trình đánh chặn:

public class NVarcharInterceptor : IDbCommandInterceptor
{
    public void NonQueryExecuted(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void NonQueryExecuting(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void ReaderExecuted(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void ScalarExecuted(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }

    public void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
    {
        if (command != null && !string.IsNullOrWhiteSpace(command.CommandText))
            command.CommandText = command.CommandText.Replace("N''", "''");
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể tạo mô hình django từ cơ sở dữ liệu không?

  2. Những điều bạn phải biết về Bảng FND_LOBS trong Ứng dụng Oracle

  3. Lấy vị trí của bảng bên ngoài và tên tệp?

  4. Xác định nội dung trình tự ASH trong RAC

  5. Hàm ROWIDTONCHAR () trong Oracle