Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problem z konfiguracją EF Core z posiadanym typem używanym w 2 różnych klasach

Aktualizacja (EF Core 3.x):

Nadal nie ma publicznego sposobu na uzyskanie EntityTypeBuilder , ale przynajmniej argument konstruktora został zmodyfikowany na IMutableEntityType wpisz, więc tylko

using Microsoft.EntityFrameworkCore.Metadata.Builders;

jest potrzebny, a odpowiedni kod jest teraz

var entityTypeBuilder = new EntityTypeBuilder(entityType);

Oryginał (EF Core 2.x):

Problem polega na tym, że ClrType nie wystarczy, aby zidentyfikować typ posiadanej jednostki, stąd modelBuilder.Entity(Type) nie można użyć do uzyskania EntityTypeBuilder instancja potrzebna do płynnej konfiguracji właściwości jednostki.

Wygląda na to, że nie ma dobrego publicznego sposób na zrobienie tego w EF Core 2.x, więc wszystko, co mogę zasugerować, to użyć niektórych wewnętrznych EF Core (na szczęście publicznie dostępne pod typowym ostrzeżeniem dotyczącym użytkowania wewnętrznego).

Potrzebujesz następującego using s:

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

Pierwszy dotyczy EntityTypeBuilder druga jest dla AsEntityType() metoda rozszerzająca, która daje dostęp do wewnętrznej klasy implementującej IEntityType , a w szczególności Builder właściwość.

Zmodyfikowany kod wygląda tak:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Procedura składowana powoduje, że polecenia nie są zsynchronizowane przy następnym zapytaniu

  2. Przerwane połączenia podczas korzystania z node.js/mysql connectionPool

  3. Instalowanie Wordpress na instancji Ec2 z bazą danych na instancji RDS

  4. Jak korzystać z metody password_hash() w php..?

  5. policz liczbę zmiennych Null w wierszu mysql