大文字と小文字を区別しないEntity Framework 7のテーブルとプロパティの名前

c# entity-framework entity-framework-core npgsql postgresql

質問

私はNpgsqlアダプタでEntity Framework 7を使用します。 EFによって生成されたSQLは次のように見えます

SELECT "r"."Id", "r"."Name" FROM "public"."Role" AS "r"

大文字と小文字を区別するため、Postgresでは動作しません。それを私はテーブルのスクリプトを作成する必要が動作するように

CREATE TABLE "Role" (
    "Id" int,
    "Name" varchar(200)
);

しかし、それは醜いです。 EFで引用符なしのスクリプトや小文字の名前付けスタイルを生成する方法はありますか?

受け入れられた回答

Npgsqlがどこでも引用符を生成するのは非常に便利な理由です。@ natemcmasterのように技術的に可能であっても、それらを削除してはいけません。引用符のない識別子はPostgreSQLによって自動的に小文字に変換されます。 Entity FrameworkはC#プロパティをデータベース列にマップできる必要がありますが、C#プロパティでは大文字と小文字が区別されます。あなたがデータベースの大文字と小文字の区別を削除した場合、あなたは足で自分を撮影しています...

あなたが本当の問題(知覚された醜さを除いて)を持っていない限り、あなたは物事をそのまま残すべきです。


人気のある回答

  1. NpgsqlSqlGenerationHelperのDelimitIdentifierを次のようにオーバーライドします。

    public class SqlGenerationHelper : NpgsqlSqlGenerationHelper
    {
        public override string DelimitIdentifier(string identifier) => identifier.Contains(".") ? base.DelimitIdentifier(identifier) : identifier;
    }
    
  2. ReplaceServiceメソッドを使用して、ISqlGenerationHelperをクラスに置き換えます。

    public class MyContext : DbContext
    {
        public virtual DbSet<MyTable> MyTable { get; set; }
    
        public MyContext(DbConnection connection) :
               base(new DbContextOptionsBuilder().UseNpgsql(connection)
                                                 .ReplaceService<ISqlGenerationHelper, SqlGenerationHelper>()
                                                 .Options) 
        { }
    }
    


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ