sql >> Databasteknik >  >> RDS >> Mysql

EF Core konfigurationsproblem med ägd typ som används i 2 olika klasser

Uppdatering (EF Core 3.x):

Fortfarande inget offentligt sätt att skaffa EntityTypeBuilder , men åtminstone konstruktorargumentet har ändrats till att vara IMutableEntityType typ, så bara

using Microsoft.EntityFrameworkCore.Metadata.Builders;

behövs, och motsvarande kod är nu

var entityTypeBuilder = new EntityTypeBuilder(entityType);

Original (EF Core 2.x):

Problemet är att ClrType är inte tillräckligt för att identifiera den ägda enhetstypen, därför modelBuilder.Entity(Type) kan inte användas för att hämta EntityTypeBuilder instans som behövs för att flytande konfigurera entitetsegenskaperna.

Det verkar som om det inte finns någon bra offentlighet sätt att göra det i EF Core 2.x, så allt jag kan föreslå är att använda några av EF Core internal (lyckligtvis allmänt tillgänglig under den typiska varningen för intern användning).

Du behöver följande using s:

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

Den första är för EntityTypeBuilder klass, den andra är för AsEntityType() tilläggsmetod som ger dig tillgång till den interna klassen som implementerar IEntityType , och i synnerhet Builder egendom.

Den modifierade koden ser ut så här:

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. 10 tidsbesparande tips för MS Access-användare

  2. Vad är det bästa sättet att regelbundet ladda data till tabellen

  3. SQL LIKE-operatör för nybörjare

  4. ÄNDRA KOLUMN i Oracle - Hur kontrollerar jag om en kolumn är nullbar innan den ställs in på nullbar?