Неверное имя объекта при использовании Entity Framework для чтения таблицы SQL Server - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь установить соединение с базой данных с помощью Entity Framework в приложении ASP.NET Core, но каждый раз, когда я пытаюсь прочитать из моего контекста данных, не удается указать, что таблица, которую я пытаюсь получить, является недействительной ,

Я относительно новичок в EF с ASP.NET Core, поэтому я мог упустить что-то очевидное. Как я могу заставить EF соединиться / найти мой объект?

Моя строка подключения выглядит следующим образом:

Data Source=DbServer;Initial Catalog=AIT;Integrated Security=True

И таблица, из которой я пытаюсь прочитать, включена DbServer:

AIT.processing.orderProcessing

Я получаю сообщение об ошибке при попытке подключиться к контексту БД:

SqlException: Неверное имя объекта 'processing.orderProcessing'.

Я посмотрел на сам контекст, когда он работает, и он подключается к нужному серверу. Я также проверил, что база данных верна в строке подключения и содержит таблицу processing.orderProcessing. Я также пытался явно указать EF, что он должен подключаться к определенному объекту, используя свойство Table в моем классе c #:

[Table("AIT.processing.orderProcessing")]

Это просто приводит к изменению моего сообщения об ошибке на:

SqlException: Неверное имя объекта 'AIT.processing.orderProcessing'.

Насколько я знаю, если он подключается к DBServer, он должен быть в состоянии найти эту таблицу, поскольку она определенно существует, и она написана правильно. Я просто скопировал / вставил его из SSMS, чтобы убедиться.

Edit: Ниже ответ был то, что исправило это для меня. Изменение атрибута моей таблицы на это:

[Table("orderProcessing", Schema = "processing")]

Заставил EF подключиться.

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Если ваша база данных называется «AIT», а схема «обрабатывает», вы должны указать ядру EF свое имя схемы.

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.HasDefaultSchema("processing");
}
0 голосов
/ 07 июня 2019

Итак, AIT - это имя базы данных, processing - это имя схемы, а orderProcessing - это имя таблицы.

Попробуйте задать имя таблицы и имя схемы отдельно, используя аннотации данных, такие как:

[Table("orderProcessing", Schema = "processing")]

Или в DbContext OnModelCreating, используя:

 modelBuilder.Entity<MyEntity>().ToTable("orderProcessing", processing);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...