EFCore SQL二重引用符で質問を関連

1:PL / SQLシングル、ダブル作用引用符

    単一引用符:単一引用符は、ストリング区切り文字は、文字列リテラルを定義するために使用されます

    二重引用符:二重引用符を使用すると、敏感な方法の区別は、データベース・テーブルを作成する場合、参照識別子セパレータは、大文字と小文字を区別の方法でデータベースディレクトリから作成されたテーブルにアクセスするために使用することができているが、これが必要です。二重引用符は、ノート引用滞在キーワードをつながる可能性があります。

 

 

2:SQL治療に二重引用符でEFコア

 

 問題はキャッチ実行エラーログを取得しますが発生しました:

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();
        }

再割当テーブルおよび列の名前(ビュー、インデックスなどように処理することができる)、次いでDBContextのサブクラスでオーバーライドOnModelCreating方法


    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