OnModelСоздание рефакторинга кода с EF6 на EF core 3.1 - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь реорганизовать метод OnModelCreating раньше, когда он был частью ASP. net::

protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
     base.OnModelCreating(modelBuilder);
     modelBuilder.Types().Configure(c => c.ToTable(c.ClrType.Name.ToUpper()));
     modelBuilder.Properties().Configure(c => c.HasColumnName(c.ClrPropertyInfo.Name.ToUpper()));

....

Но теперь, после перехода на .netCore 3.1, я получаю эту ошибку

'ModelBuilder' не содержит определения для 'Типов' и нет доступного метода расширения 'Типы', принимающего первый аргумент типа 'ModelBuilder 'можно найти

Не могли бы вы предложить способ правильно реорганизовать код, сохранив тот же старый лог c

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 03 августа 2020

Согласно вашему коду, кажется, что вы хотите изменить имя таблицы и установить имя столбца, если это так, вы можете попробовать сослаться на следующий код, чтобы переопределить метод OnModelCreating:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{ 
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
        
    }
    public DbSet<Blog> Blogs { get; set; }  

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        //Write Fluent API configurations here

        //Property Configurations 
        modelBuilder.Entity<Blog>().ToTable("BLOGS");
        modelBuilder.Entity<Blog>()
            .Property(b => b.BlogId)
            .HasColumnName("BLOG_ID");

    }
}

Более подробную информацию можно найти по следующим ссылкам:

Конфигурация EF Core Fluent API

Типы объектов # Имя таблицы

Имена столбцов

Как указать отображение основной таблицы Entity Framework?

Изменить :

А как насчет второго правила конфига; modelBuilder.Properties (). Настроить (c => c .HasColumnName (c .ClrPropertyInfo.Name.ToUpper ())); Я не могу go пройти через каждый столбец, чтобы просто сделать его прописным

Там есть плагин с открытым исходным кодом ( Соглашения об именах ), который может вам помочь. Используя его UseUpperCaseNamingConvention, он может изменить имя таблицы и столбца на верхний регистр.

Вы можете использовать следующие шаги, чтобы использовать его:

  1. Добавьте EFCore.NamingConventions из Nuget.

  2. Включите соглашение об именах в методе OnConfiguring вашей модели:

     public class SchoolContext : DbContext
     {
         public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
         {
         } 
         public DbSet<Customer> Customers { get; set; }
         protected override void OnModelCreating(ModelBuilder modelBuilder)
         {
             base.OnModelCreating(modelBuilder);
         } 
         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         {
             base.OnConfiguring(optionsBuilder);
             optionsBuilder.EnableSensitiveDataLogging();
             optionsBuilder
                 .UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=TestDB;Trusted_Connection=True;MultipleActiveResultSets=true")       //database connection string.
                 .UseUpperCaseNamingConvention();
         }
     }
    

    После миграции вы можете увидеть снимок модели , это изменит имя таблицы и столбца, как показано ниже:

    enter image description here

    Then, after update the database, the table like this:

    введите описание изображения здесь

[Примечание] The Naming Conventions - это подключаемый модуль, поддерживаемый сообществом: он не является официальной частью Entity Framework Core и никоим образом не поддерживается Microsoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...