Я провел много дней, чтобы решить эту проблему, проанализировал много разных сообщений и попробовал много вариантов и, наконец, исправил. Это два проекта в моем решении с использованием первых миграций EF-кода:
. Я получил эту ошибку при запросе WebApi .. .
Моя среда:
Здесь я собрал все замечания, на которые вы должны обратить внимание, и все условия / требования, которые должны быть выполнены, чтобы избежать упомянутого исключения:
должен быть равен параметру, переданному в конструкторе вашего DbContext: public partial class MyDbContext : DbContext
{
public MyDbContext()
: base("name=MyConnectionString"){}
...
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion());
...
Я попробовал очистить и перестроить решение, но это не помогло, чем я полностью удалил папки bin и obj из WebApi, удалил файлы базы данных из WebApi / App_Data, создал, перезапустил WebApi, сделал запрос к нему, создал правильную базу данных - ленивый инициализация (используя строки выше), что соответствует последней миграции и исключению, больше не отображается. Таким образом, это может решить вашу проблему: удалите вручную bin, obj-папки из вашего проекта запуска (который генерирует / обновляет вашу базу данных), создайте ваш проект запуска или лучше очистите и перестройте все ваше решение. воссоздайте базу данных, запустив проект (выполнив строки выше) или воспользуйтесь командой «Обновление-база данных» диспетчера пакетов. вручную проверьте, соответствует ли сгенерированный db и __MirgationHistory последнему сценарию миграции. Если the_table принадлежит пользователю "some_user" затем:
select * from some_user.the_table;
Необходимо сделать:
SELECT * FROM schema_name.the_table;
Или используйте СИНОНИМЫ...
CREATE SYNONYM the_table FOR schema_name.the_table;
Как предыдущие ответы сказали, можно снабдить префиксом имя объекта название схемы:
SELECT * FROM schema_name.the_table;
Или можно использовать синоним (частный или общедоступный):
CREATE (PUBLIC) SYNONYM the_table FOR schema_name.the_table;
Или можно дать изменить команду сессии для установки схемы по умолчанию на та, которую Вы хотите:
ALTER SESSION SET current_schema=schema_name;
Обратите внимание, что это просто устанавливает схему по умолчанию и является эквивалентом добавления префикса всех (неполных) имен объектов с schema_name
. Можно все еще снабдить префиксом объекты другое название схемы для доступа к объекту из другой схемы. Используя SET current_schema
не влияет на Ваши полномочия: у Вас все еще есть полномочия пользователя, Вы вошли в систему как, не схема, которую Вы установили.