Удалить префикс таблиц с помощью. net Core - PullRequest
3 голосов
/ 06 апреля 2020

Мы делаем. net Базовое приложение. Для этого мы должны использовать существующую базу данных. Эта база данных используется и другими программами, поэтому мы не можем что-то изменить в ней. Так что сначала это база данных. Проблема в том, что у нас есть некоторый префикс в наших таблицах. Таблицы всегда начинаются с tbl, а поля начинаются с индивидуального префикса:

Имя таблицы: tblPerson

Поля: PeName, PeStreet, ...

Поэтому, если я использую PowerTools, классы всегда имеют эти префиксы. Поскольку наша база данных очень большая, мы используем powertools каждый раз, когда нам нужна новая таблица из db. Из-за этого мы не можем изменить их напрямую в DbContext.

Можно ли как-нибудь удалить префикс? Или изменить их глобально в моем решении?

Ответы [ 3 ]

5 голосов
/ 06 апреля 2020

В именах таблиц базы данных и имен столбцов могут быть разные имена классов моделей и свойств.

Используйте атрибуты Table и Column, чтобы сообщить ядру EF имена в базе данных.

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

[Table("tblPerson")]
public class Person
{
    [Column("PeName")]
    public string Name { get; set; }

    [Column("PeStreet")]
    public string Street { get; set; }

    // ...
}

Вы также можете использовать Fluent API для определения этих свойств в OnModelCreating в вашей DbContext.

Документация аннотаций данных

3 голосов
/ 06 апреля 2020

Вы можете переименовать таблицы и столбцы в процессе обратного инжиниринга, добавив файл с именем efpt.renaming. json в папку проекта. Ниже приведен формат этого файла:

[
  {
    "UseSchemaName": true,
    "SchemaName": "machine",
    "Tables": [
      {
        "Name": "alert_ui",
        "Columns": [
          {
            "Name": "alarm_name",
            "NewName": "NameOfTheAlarm"
          },
          {
            "Name": "columnOldName1",
            "NewName": "columnNewName1"
          }
        ]
      }
    ]
  },
  {
    "UseSchemaName": true,
    "SchemaName": "master",
    "Tables": [
      {
        "Name": "measure",
        "Columns": [
          {
            "Name": "alarm_name",
            "NewName": "NameOfTheAlarm"
          },
          {
            "Name": "columnOldName1",
            "NewName": "columnNewName1"
          }
        ]
      }
    ]
  },
  {
    "UseSchemaName": false,
    "SchemaName": "dbo",
    "Tables": [
      {
        "Name": "work_cells",
        "NewName":  "WorkCell",
        "Columns": [
          {
            "Name": "columnOldName1",
            "NewName": "columnNewName1"
          }
        ]
      }
    ]
  }
]

и ссылка на этот файл на github: https://github.com/ErikEJ/EFCorePowerTools/blob/master/src/GUI/EFCorePowerTools/efpt.renaming.json

0 голосов
/ 06 апреля 2020

вы можете использовать Fluent API для настройки объекта для сопоставления его с таблицей базы данных.

  public class SchoolContext: DbContext 
    {
        public SchoolDBContext(): base() 
        {
        }

        public DbSet<Student> Students { get; set; }
        public DbSet<Standard> Standards { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //Configure default schema
            modelBuilder.HasDefaultSchema("Admin");

            //Map entity to table
            modelBuilder.Entity<Student>().ToTable("StudentInfo");
            modelBuilder.Entity<Standard>().ToTable("StandardInfo","dbo");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...