따옴표 관련 질문에 EFCore의 SQL

1 : PL / SQL 싱글, 더블 작용 따옴표

    작은 따옴표 : 작은 따옴표는 문자열 구분 기호는 문자열 리터럴을 정의하는 데 사용됩니다

    따옴표 : 큰 따옴표가 민감한 방식으로 구별이 데이터베이스 테이블을 만들 경우 참조 식별자 구분, 대소 문자를 구별 방법을 데이터베이스 디렉토리에서 만든 테이블에 액세스하는 데 사용할 수 있습니다, 이것은 필요합니다. 메모를 초래할 수 따옴표는 숙박 키워드를 언급했다.

 

 

2 : SQL 처리에 큰 따옴표와 EF 코어

 

 문제가 발생 GET 잡은 실행 오류 로그 :

2020-03-17 21:35:33,618 [9 ERROR]  ---- Failed executing DbCommand (414ms) [Parameters=[], CommandType='Text', CommandTimeout='0']
SELECT "s"."Pid", "s"."Abbr", "s"."Address", "s"."Batteries_In_Stock", "s"."Charger_Count", "s"."City", "s"."Close_Time", "s"."Company_Pid", "s"."District_Code", "s"."Gmt_Create", "s"."Gmt_Modified", "s"."Latitude", "s"."Longitude", "s"."Manager", "s"."Name", "s"."Open_Time", "s"."Province", "s"."Remark", "s"."Station_No", "s"."Status", "s"."Tel", "s"."User_Create", "s"."User_Modified"
FROM "charging_station" "s"
WHERE "s"."Station_No" = N'48'Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00942: 表或视图不存在

  사실,이 문제는 PL / SQL의 내부 구현에 인용 부호를 제거 할 때 재미, 문제가 무엇을하지 따옴표로 아직도있다. PL / SQL을 추가 한 후, 그들은 같은 예외를보고

ORA-00942 : 테이블 또는 존재하지 않는 볼 수 있습니다.

솔루션은 다음과 같은 (참조, 나는 모든 성능 손실 후,이 문제를 해결하기 위해 다른 더 좋은 방법이 희망) 다음

모든 테이블 이름의 첫 번째 필드는 _ 밑줄 대문자 치료에 테이블과 열 이름을 돌려


        public static string ToSnakeCase(this string input)
        {
            if (string.IsNullOrEmpty(input)) { return input; }

            var startUnderscores = Regex.Match(input, @"^_+");
            return startUnderscores + Regex.Replace(input, @"([a-z0-9])([A-Z])", "$1_$2").ToUpper();
        }

재 할당 테이블과 열 이름 (뷰, 인덱스 등 처리 될 수 있으므로) 메소드는 OnModelCreating DBContext의 서브 클래스에서 재정의


    public class OracleDBContext : Microsoft.EntityFrameworkCore.DbContext
    {
        public OracleDBContext(DbContextOptions<OracleDBContext> options) : base(options)
        {
        }  
        .....业务表DbSet

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            ...业务表 modelBuilder.Entity

            foreach (var entity in modelBuilder.Model.GetEntityTypes())
            {
                // 重置所有表名
                var snakecase = entity.Relational().TableName.ToSnakeCase();
                entity.Relational().TableName = snakecase;
                // 重置所有列名
                foreach (var property in entity.GetProperties())
                {
                    property.Relational().ColumnName = property.Relational().ColumnName.ToSnakeCase();
                }
            }
        }

    } 

 

게시 12 개 원래 기사 · 원의 칭찬 0 · 조회수 651

추천

출처blog.csdn.net/oopxiajun2011/article/details/104932499