Как Система в Sqlplus, как я запрашиваю таблицу другого пользователя?

Я провел много дней, чтобы решить эту проблему, проанализировал много разных сообщений и попробовал много вариантов и, наконец, исправил. Это два проекта в моем решении с использованием первых миграций EF-кода:

  • Консольное приложение «DataModel», которое в основном используется как сборка, которая содержит все мои первые объекты кода, DbContext, Mirgations и общий репозиторий. Я включил в этот проект отдельный пустой файл локальной базы данных (в папке DataModel / App_Data), чтобы иметь возможность генерировать миграцию из консоли диспетчера пакетов.
  • WebApi, который ссылается на проект DataModel и использует файл локальной базы данных из папки WebApi / App_Data, который не включен в проект

. Я получил эту ошибку при запросе WebApi .. .

Моя среда:

  • Windows 8.1 x64
  • Visual Studio 2015 Professional с обновлением 1
  • все мои проекты, предназначенные для .NET Framework 4.6.1
  • EntityFramework 6.1.3 из NuGet

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

  1. Вы должны использовать только одну версию пакета EntityFramework Nuget для всех проектов в вашем решении.
  2. База данных, созданная путем запуска последовательно всех сценариев миграции, должна иметь та же структура / схема, что и целевая база данных, и соответствует модели сущности. Следующие 3 вещи должны точно соответствовать / отражать / соответствовать друг другу: весь ваш сценарий миграции до последнего текущего состояния модели первого объекта текущего кода (DbContext, entity) Целевая база данных
  3. Целевая база данных (файл mdf) должна обновляться / соответствуют последнему сценарию миграции. Убедитесь, что таблица «__MigrationHistory» в вашей целевой базе данных содержит записи для всех сценариев миграции, которые вы имеете, это означает, что все сценарии миграции были успешно применены к этой базе данных. Я рекомендую вам использовать Visual Studio для генерации правильного кода первых сущностей и контекста, соответствующих вашей базе данных, Project -> Добавить новый элемент -> Модель данных Entity Data ADO.NET -> Код First из базы данных: Of Конечно, в качестве альтернативы, если у вас нет базы данных, вы можете написать модель вручную (код первых сущностей и контекста), а затем сгенерировать начальную миграцию и базу данных.
  4. Название строки подключения, например. MyConnectionString в файле конфигурации проекта запуска (Web.config / App.config):
    
      
        
      
    
    
    должен быть равен параметру, переданному в конструкторе вашего DbContext:
     public partial class MyDbContext : DbContext
     {
        public MyDbContext()
           : base("name=MyConnectionString"){}
        ...
    
  5. Перед использованием консоли диспетчера пакетов убедитесь, что что вы используете правильную базу данных для обновления или создания миграции, а необходимый проект задается в качестве запуска проекта решения. Для подключения к базе данных он будет использовать строку подключения из этого файла .config, который в проекте, который задан как проект запуска.
  6. И главное, что исправило мою проблему: это странно, но в моей папке WebApi / bin DataModel.exe был старым, а не обновлялся с момента последней сборки. Так как миграции были встроены в мою сборку DataModel.exe, то моя обновленная база данных WebApi использовала старые зеркала. Я был смущен, почему после обновления базы данных в WebApi он не соответствует последнему сценарию миграции из DataModel. Следующий код автоматически создает (если не существует) или обновляет последнюю локальную локальную миграцию в моей папке WebApi / App_Data.
       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 последнему сценарию миграции.

5
задан OMG Ponies 25 March 2011 в 23:27
поделиться

3 ответа

Если the_table принадлежит пользователю "some_user" затем:

select * from some_user.the_table;
7
ответ дан 18 December 2019 в 07:58
поделиться

Необходимо сделать:

SELECT * FROM schema_name.the_table;

Или используйте СИНОНИМЫ...

CREATE SYNONYM the_table FOR schema_name.the_table;
4
ответ дан 18 December 2019 в 07:58
поделиться

Как предыдущие ответы сказали, можно снабдить префиксом имя объекта название схемы:

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 не влияет на Ваши полномочия: у Вас все еще есть полномочия пользователя, Вы вошли в систему как, не схема, которую Вы установили.

9
ответ дан 18 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: