Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Masalah konfigurasi EF Core dengan tipe yang dimiliki yang digunakan di 2 kelas berbeda

Pembaruan (EF Core 3.x):

Masih belum ada cara umum untuk mendapatkan EntityTypeBuilder , tetapi setidaknya argumen konstruktor telah dimodifikasi menjadi IMutableEntityType ketik, jadi hanya

using Microsoft.EntityFrameworkCore.Metadata.Builders;

diperlukan, dan kode yang sesuai sekarang adalah

var entityTypeBuilder = new EntityTypeBuilder(entityType);

Asli (EF Core 2.x):

Masalahnya adalah ClrType tidak cukup untuk mengidentifikasi tipe entitas yang dimiliki, oleh karena itu modelBuilder.Entity(Type) tidak dapat digunakan untuk mendapatkan EntityTypeBuilder instance yang diperlukan untuk mengonfigurasi properti entitas dengan lancar.

Sepertinya tidak ada publik yang bagus cara melakukannya di EF Core 2.x, jadi yang bisa saya sarankan adalah menggunakan beberapa internal EF Core (untungnya dapat diakses publik di bawah peringatan penggunaan internal yang khas).

Anda memerlukan using berikut ini s:

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

Yang pertama adalah untuk EntityTypeBuilder kelas, yang kedua adalah untuk AsEntityType() metode ekstensi yang memberi Anda akses ke kelas internal yang mengimplementasikan IEntityType , dan khususnya Builder properti.

Kode yang dimodifikasi terlihat seperti ini:

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. MySQL JIKA TIDAK NULL, lalu tampilkan 1, jika tidak tampilkan 0

  2. Bagaimana cara mengisi dropdown kedua berdasarkan pilihan dropdown pertama menggunakan jQuery/AJAX dan PHP/MySQL?

  3. Gunakan FullCalendar tanpa tanggal

  4. Bagaimana cara kerja gabungan batin pada hubungan banyak-ke-banyak menggunakan Doctrine dan Symfony2

  5. Dua tabel, dengan hubungan satu ke banyak. Bagaimana cara menggabungkan nilai tanpa baris duplikat?