Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sự cố cấu hình EF Core với kiểu sở hữu được sử dụng trong 2 lớp khác nhau

Cập nhật (EF Core 3.x):

Vẫn không có cách công khai nào để lấy EntityTypeBuilder , nhưng ít nhất đối số của hàm tạo đã được sửa đổi thành IMutableEntityType loại, vì vậy chỉ

using Microsoft.EntityFrameworkCore.Metadata.Builders;

là cần thiết và mã tương ứng bây giờ là

var entityTypeBuilder = new EntityTypeBuilder(entityType);

Bản gốc (EF Core 2.x):

Vấn đề là ClrType không đủ để xác định loại thực thể được sở hữu, do đó modelBuilder.Entity(Type) không thể được sử dụng để lấy EntityTypeBuilder phiên bản cần thiết để cấu hình thành thạo các thuộc tính thực thể.

Có vẻ như không có công khai cách thực hiện điều đó trong EF Core 2.x, vì vậy tất cả những gì tôi có thể đề xuất là sử dụng một số nội bộ của EF Core (may mắn là có thể truy cập công khai theo cảnh báo sử dụng nội bộ điển hình).

Bạn cần using s:

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

Đầu tiên là cho EntityTypeBuilder lớp, thứ hai dành cho AsEntityType() phương thức mở rộng cung cấp cho bạn quyền truy cập vào lớp nội bộ triển khai IEntityType và đặc biệt là Builder tài sản.

Mã đã sửa đổi trông giống như sau:

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. Có những cách nào để lưu trữ thông tin về người dùng ẩn danh / khách trong cơ sở dữ liệu?

  2. sử dụng mysql_free_result ($ result) có phải là một phương pháp hay không?

  3. Phân tách giá trị trường cơ sở dữ liệu mySql bằng dấu phẩy phân tách bằng php

  4. Mã lỗi:2013. Mất kết nối với máy chủ MySQL trong khi truy vấn

  5. Mô hình giá trị thuộc tính thực thể - Thay thế hiệu suất?