ASP.NET MVC 3, SQL Server: таблицы не отображаются в проводнике, но они есть

Моя база данных хранится в .mdf в App_Data и работает нормально. Мое приложение может добавлять, редактировать, удалять записи.

Но таблицы невидимы. Когда я открываю обозреватель серверов, прикрепляю свой .mdf и пытаюсь просмотреть таблицы, там их нет. Я также прикрепил файл к SQL Server Management Studio, но там отображаются только те таблицы, которые находятся в папке System Tables.

Из того, что я смог почерпнуть из технической болтовни в MSDN, это может быть проблема с разрешениями или правами собственности. Я не знаю о разрешениях, учитывая, что я могу подключаться к базе данных и запрашивать ее, а также редактировать/удалять записи. Так что, возможно, право собственности; Я где-то читал, что таблицы, не принадлежащие dbo, могут не отображаться. Но если это так, я не знаю, каково имя владельца моего приложения или как заставить Management Studio или даже Server Explorer отображать таблицы, принадлежащие другим пользователям.

Вот строка подключения на случай, если там есть ответ:

<add name="EFDBContext" connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=|DataDirectory|MLDatabase.mdf;Database=EFDbContext;User Instance=true" providerName="System.Data.SqlClient"/>

Спасибо всем, кто может указать мне в правильном направлении!

Расчетное время прибытия. это кажется как аналогичная проблема, но я не знаю, будет ли применяться решение, поскольку моя база данных была создана не скриптами, а Entity Framework (модель Code-First).


person Sabrina S    schedule 03.03.2012    source источник
comment
Что произойдет, если вы удалите базу данных и снова запустите приложение? Он его создает? Что произойдет, если вы удалите User Instance часть строки подключения?   -  person Ladislav Mrnka    schedule 03.03.2012
comment
Хм, приложение все еще работает, когда я удаляю свой .mdf. Это не хорошо. Где он хранит мои данные!? Где-то в туманах SQL Express несомненно. Как это вообще... как я могу не знать, в какой БД хранятся мои данные? вздыхает Что ж, это объясняет, почему я все равно не вижу свои столы...   -  person Sabrina S    schedule 03.03.2012
comment
Я нашел свои данные в MSSQL/DATA. Он сохраняется там, даже когда я меняю Initial Catalog в строке подключения на App_Data/MLDatabase.mdf. Но это, очевидно, база данных, созданная после того, как я удалил свой .mdf, потому что номера индексов строк разные.   -  person Sabrina S    schedule 03.03.2012
comment
Прежде всего, ваша строка подключения неверна. Чтобы использовать локальный файл, он должен определить путь к файлу в свойстве AttachDBFileName, а не в свойстве Исходный каталог. Если вы не используете AttachDBFileName, он создает базу данных непосредственно в SQL Express — именно там вы нашли базу данных.   -  person Ladislav Mrnka    schedule 04.03.2012
comment
Когда я делаю это единственное изменение, я получаю два сообщения об ошибке или, может быть, одно из двух частей: База данных «C:\Users\Sabrina\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS\EFDbContext.mdf» уже существует. Выберите другое имя базы данных. Не удается прикрепить файл «C:\Users\Sabrina\documents\visual studio 2010\Projects\HW3\HW3\App_Data\MLDatabase.mdf» в качестве базы данных «EFDbContext».   -  person Sabrina S    schedule 04.03.2012
comment
Это заставляет меня задаться вопросом, не скрыта ли где-нибудь в моем проекте вторая строка подключения. Я нашел в web.config элемент структуры сущности с этим дочерним элементом: <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" />   -  person Sabrina S    schedule 04.03.2012
comment
Эта статья предлагала многообещающую зацепку, но на моей машине такого конфликта нет. .конфигурационный файл.   -  person Sabrina S    schedule 04.03.2012


Ответы (4)


У меня была аналогичная проблема. Я создал резервную копию базы данных, добавил ее на сервер mssql и вместо этого указал свою строку подключения на новую.

person Magnus Karlsson    schedule 03.03.2012
comment
Я не уверен, как это можно применить в моем случае — база данных была создана Entity Framework с использованием соглашения Code First, поэтому я вообще не писал сценарий. Спасибо! - person Sabrina S; 04.03.2012
comment
Щелкните правой кнопкой мыши свою базу данных в SQL Server Management Studio, выберите «Задачи», выберите «Создать сценарии» и позвольте руководству создать для вас сценарий резервного копирования. Теперь у вас есть сценарий sql для создания новой базы данных. - person Magnus Karlsson; 04.03.2012

Причина, по которой таблицы не отображались, заключается в том, что они, конечно, не были в .mdf. Как я отметил в комментарии, я нашел их в другом месте, в месте, выбранном SQL Server.

Обходной путь — просто позволить EF построить базу данных SQL Server там, где он хочет, остановить службу SQL Server, переместить ее в папку App_Data, соответствующим образом изменить строку подключения, а затем присоединить ее к проекту ASP.NET.

Другая проблема заключается в том, что Сетевая служба SQL Server не имеет разрешения делать что-либо в C:\Users\Me или папку Documents and Settings, пока вы не перейдете в эту папку и не назначите разрешение сетевой службе напрямую. Тогда и только тогда вы сможете, например, подключить базу данных к SQL Server Management Studio. Это верно даже тогда, когда Visual Studio устанавливает SQL Server... а затем отказывает ему в доступе к файлам, в которых VS хранит свои собственные проекты. я не понимаю; ИМО, любой разработчик, который знает об этом, первое, что он собирается сделать, просто чтобы выполнить свою работу, - это все равно дать сетевому сервису это разрешение.

person Sabrina S    schedule 06.03.2012

Проверьте тип defaultConnectionFactory в вашей конфигурации. Я ожидаю, что для него установлено значение LocalConnectionFactory, так как это похоже на значение по умолчанию.

Измените его на следующее, и будет использоваться ваш экземпляр SQL.

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True;" />
  </parameters>
</defaultConnectionFactory>

Ваша БД должна появиться в SQL Management Studio (SQLMS) с именем, соответствующим пространству имен.

person will webster    schedule 13.11.2014

Пожалуйста, не беспокойтесь. просто необходимо соответствующим образом перенастроить строку подключения в файле Web.config: - убрать постфикс "\SQLEXPRESS" из имени сервера; - Удалите пару ключ/значение «Экземпляр пользователя = true».

Если ваш класс DbContext — StudentDbContext, тогда поместите Database=StudentDb;

Or

person I_Pencil    schedule 13.02.2016