sql >> データベース >  >> RDS >> Mysql

2つの異なるクラスで使用される所有タイプのEFコア構成の問題

    更新(EF Core 3.x):

    EntityTypeBuilderを取得する公的な方法はまだありません 、ただし、少なくともコンストラクター引数はIMutableEntityTypeに変更されています タイプするので、

    using Microsoft.EntityFrameworkCore.Metadata.Builders;
    

    が必要であり、対応するコードは現在

    var entityTypeBuilder = new EntityTypeBuilder(entityType);
    

    オリジナル(EF Core 2.x):

    問題は、ClrType 所有するエンティティタイプを識別するのに十分ではないため、modelBuilder.Entity(Type) EntityTypeBuilderの取得には使用できません エンティティのプロパティを流暢に構成するために必要なインスタンス。

    良い公開がないようです EF Core 2.xでそれを行う方法なので、私が提案できるのは、EFCoreの内部の一部を使用することだけです。 (幸いなことに、一般的な内部使用警告の下で一般公開されています)。

    次のusingが必要です s:

    using Microsoft.EntityFrameworkCore.Metadata.Builders;
    using Microsoft.EntityFrameworkCore.Metadata.Internal;
    

    1つ目はEntityTypeBuilder用です クラス、2番目はAsEntityType()用です IEntityTypeを実装する内部クラスへのアクセスを提供する拡張メソッド 、特にBuilder プロパティ。

    変更されたコードは次のようになります:

    var entityTypes = modelBuilder.Model.GetEntityTypes()
        .ToList();
    
    foreach (var entityType in entityTypes)
    {
        var properties = entityType
            .GetProperties()
            .ToList();
    
        // (1)
        var entityTypeBuilder = new EntityTypeBuilder(entityType.AsEntityType().Builder);
    
        foreach (var property in properties)
        {
            if (property.PropertyInfo == null)
            {
                continue;
            }
    
            if (property.PropertyInfo.PropertyType.IsBoolean())
            {
                entityTypeBuilder // (2)
                .Property(property.Name)
                .HasConversion(new BoolToZeroOneConverter<short>())
                .HasColumnType("tinyint(1)");
            }
        }
    }
    



    1. JDBCドライバーのバージョンとDBのバージョンは正確に一致する必要がありますか?

    2. mysql条件付き挿入-存在しない場合は挿入

    3. Oracleでフィールドの値が変更されたときに行番号をインクリメントする

    4. JSON_STORAGE_FREE()–MySQLでJSONドキュメントを更新した後に解放されたストレージスペースの量を確認する