sql >> Database >  >> RDS >> Mysql

EF Core-configuratieprobleem met eigendomstype dat in 2 verschillende klassen wordt gebruikt

Update (EF Core 3.x):

Nog steeds geen openbare manier om EntityTypeBuilder te krijgen , maar het constructorargument is in ieder geval gewijzigd in IMutableEntityType type, dus alleen

using Microsoft.EntityFrameworkCore.Metadata.Builders;

is nodig, en de bijbehorende code is nu

var entityTypeBuilder = new EntityTypeBuilder(entityType);

Origineel (EF Core 2.x):

Het probleem is dat de ClrType is niet voldoende om het eigendomstype van de entiteit te identificeren, vandaar modelBuilder.Entity(Type) kan niet worden gebruikt om de EntityTypeBuilder . te verkrijgen instantie die nodig is voor het vloeiend configureren van de entiteitseigenschappen.

Het lijkt erop dat er geen goed publiek is manier om dat te doen in EF Core 2.x, dus alles wat ik kan voorstellen is om enkele van de EF Core internals te gebruiken (gelukkig openbaar toegankelijk onder de typische waarschuwing voor intern gebruik).

Je hebt het volgende nodig using s:

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

De eerste is voor EntityTypeBuilder class, de tweede is voor AsEntityType() uitbreidingsmethode die u toegang geeft tot de interne klasse die het IEntityType . implementeert , en in het bijzonder de Builder eigendom.

De gewijzigde code ziet er als volgt uit:

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. Wat is het equivalent van de null-safe gelijkheidsoperator <=> in SQLite?

  2. waarom de vraag te lang duurt?

  3. MySQL selecteer resultaat opslaan in c# variabele

  4. SQL Server (MSSQL DBA) Database-tutorials voor beginners Databasebeheerders