Mysql
 sql >> база данни >  >> RDS >> Mysql

Проблем с конфигурацията на EF Core с притежаван тип, използван в 2 различни класа

Актуализация (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, така че всичко, което мога да предложа, е да използвате някои от вътрешните елементи на EF Core (за щастие публично достъпен под типичното вътрешно предупреждение за употреба).

Ще ви трябва следното using s:

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

Първият е за EntityTypeBuilder клас, вторият е за 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php Запитване ВЪТРЕШНИ таблици за присъединяване

  2. sails-mysql:ER_NO_DB_ERROR:Няма избрана база данни

  3. Последици от супертип и подтип

  4. Разлика между ключ, първичен ключ, уникален ключ и индекс в MySQL

  5. Как да анализирате JSON изображения от mysql и да попълните изглед на списък