Intereting Posts
Оптимизация запроса с подсчетами отдельного столбца на основе значения другого столбца postgresql эквивалент SQL Server sysprocesses loginname и имя_программы Почему существует некластеризованное сканирование индекса при подсчете всех строк в таблице? Сколько максимальных рекурсий возможно для CTE на SQL-сервере? Ограничить время отклика моего SQL-запроса EF Core Composite Key, один внешний, один автоматический приращение sql server UPDATE в сочетании с INNER JOIN с собой Извлечь данные из последних двух квадратных скобок SQL Отказ производительности ODBC от SQL Server? Отправить письмо для каждой строки в результирующем наборе Дополнительные символы при использовании XML PATH Удаление этих штопов NULLS t-sql наиболее эффективная строка в столбце? кросс-таблица для xml-пути, поворот Как проверить, присутствует ли строка в таблице SQL Server или нет? sql запрос, чтобы получить самую раннюю дату

Недопустимое имя объекта «dbo.TableName» при извлечении данных из сгенерированной таблицы

Сначала я использую код структуры сущности для создания моих таблиц. Обратите внимание: создайте таблицы, а не БД, так как я работаю над размещенной средой, и у меня нет пользователя, которому разрешено создавать db.

Выполнение обновления базы данных прекрасно работает, но получение данных дает исключение:

Сведения об исключении: System.Data.SqlClient.SqlException: недопустимое имя объекта 'dbo.EventHosts'.

Я читал, что это происходит, потому что я не использую EF Code First для создания БД. Это прекрасно, но как мне изящно решить это?

Все сгенерированные таблицы не имеют префикса типа dbo. Решение, подобное этому, не работает и не является элегантным:

[Table("EventHosts", Schema = "")] 

Solutions Collecting From Web of "Недопустимое имя объекта «dbo.TableName» при извлечении данных из сгенерированной таблицы"

Чтобы ответить на ваш первый вопрос: используйте схему, созданную для вас вашим хостинг-провайдером.

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

Например, вы можете переопределить OnModelCreating и использовать отражение, чтобы получить все свойства DbSet<> объявленные в вашем контексте. Вместо этого вы можете просто использовать простой цикл для этих свойств и создать ToTable отображения ToTable с именем свойства в виде имени таблицы и вашей настраиваемой схемы. Для выполнения этой работы потребуется некоторая игра с размышлениями.

В качестве альтернативы вы можете попытаться сделать многоразовый подход, выполнив пользовательские соглашения. Вы можете найти множество статей об использовании собственных соглашений с EF. Некоторые примеры:

  • Пользовательские соглашения в корневом коде Entity First v 4.1
  • Соглашения в Entity Framework 4.1 Final

Моя непроверенная идея высокого уровня соответствует тому же принципу и создает атрибут уровня сборки, который будет обрабатываться механизмом конвенции и применяться ко всем вашим объектам.

Попробуйте установить имя схемы по умолчанию для 'dbo' в SQL SERVER.

http://msdn.microsoft.com/en-us/library/ms173423.aspx

По причине этой ошибки таблица с именем «EventHosts» может не существовать или эта таблица переименована в другое имя, пожалуйста, проверьте это.

https://stackoverflow.com/a/12808316/3069271

У меня была такая же проблема, это была проблема множественности между сопоставлением и db.