System.Data.SqlClient.SqlException: неверное имя объекта в EF, но в атрибуте таблицы задайте правильное имя - PullRequest
0 голосов
/ 30 октября 2019

Я создал класс для настройки соответствующего имени таблицы в базе данных с правильным именем «MyTableInfo» по атрибуту Table:

using System.ComponentModel.DataAnnotations.Schema;

[Table("MyTableInfo" , Schema = "dbo")]
public class MyTableInfo
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }
}

, и я использую Fluent API в классе модели для добавления некоторых ограничений:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Answers>()
        .HasMany(e => e.MyTableInfo)
        .WithRequired(e => e.Answers)
        .HasForeignKey(e => e.AnswersId)
        .WillCascadeOnDelete(false);
}

Но когда я пытаюсь получить данные из таблицы, у меня возникает исключение:

System.Data.SqlClient.SqlException: недопустимое имя объекта 'dbo.MyTableInfoes'

однако в моих исходных файлах нет даже строки с текстом MyTableInfoes !!!

Как это исправить?

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Причина в том, что EF генерирует множественное имя для таблиц, есть возможность удалить эту конфигурацию.

В вашем классе контекста БД переопределите следующий метод

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    base.OnModelCreating(modelBuilder);
}

, чтобы иметьэто не множит сгенерированные имена таблиц.

0 голосов
/ 30 октября 2019

Причина - использование 2 различных методов для настройки EF - Атрибуты аннотаций данных и Свободный API. Просто удалите атрибут Table и добавьте его в Fluent API:

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
       {
        modelBuilder.Entity<MyTableInfo>().ToTable("MyTableInfo");

В соответствии с соглашениями по умолчанию EF создает имя таблицы, соответствующее имени свойства> + 's' (или 'es') -это причина, почему я не могу найти строку MyTableInfoes в моих исходных файлах ...

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