sql >> Databáze >  >> RDS >> Mysql

Problém konfigurace EF Core s vlastněným typem používaným ve 2 různých třídách

Aktualizace (EF Core 3.x):

Stále neexistuje veřejný způsob, jak získat EntityTypeBuilder , ale alespoň argument konstruktoru byl upraven tak, aby byl IMutableEntityType typu, tedy pouze

using Microsoft.EntityFrameworkCore.Metadata.Builders;

a odpovídající kód je nyní

var entityTypeBuilder = new EntityTypeBuilder(entityType);

Originál (EF Core 2.x):

Problém je v tom, že ClrType nestačí k identifikaci vlastněného typu entity, proto modelBuilder.Entity(Type) nelze použít k získání EntityTypeBuilder instance potřebná pro plynulou konfiguraci vlastností entity.

Zdá se, že neexistuje žádná dobrá veřejnost způsob, jak to udělat v EF Core 2.x, takže vše, co mohu navrhnout, je použít některé z vnitřností EF Core (naštěstí veřejně přístupné pod typickým varováním pro interní použití).

Budete potřebovat následující using s:

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

První je pro EntityTypeBuilder třída, druhá je pro AsEntityType() metoda rozšíření, která vám umožňuje přístup k interní třídě implementující IEntityType , a zejména Builder vlastnost.

Upravený kód vypadá takto:

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. Vyhledání, stanovení priority a vyřešení problémů se serverem SQL během několika minut

  2. Problém s výběrem jednoho náhodného řádku z tabulky MySQL

  3. Vytvoření nové tabulky v Laravelu na základě uživatelského vstupu?

  4. php, jak propojit soubor ze souborového serveru s těmito informacemi z databáze