2013-03-10 3 views
5

Это о ConnectionStrings/ASP.NET MVC с Visual Studio 2012 Конечной & SQL Server Express 2012.ASP.NET ConnectionString AttachDbFilename = | DataDirectory |

Вслед за этим учебник здесь: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4 я наткнулся на вопрос с этими двумя строками подключения в моем web.config:

<connectionStrings> 
    <add name="DefaultConnection" 
     connectionString="Data Source=(LocalDb)\v11.0; 
          Initial Catalog=aspnet-MvcMovie-users; 
          Integrated Security=SSPI; 
          AttachDBFilename=|DataDirectory|\aspnet-MvcMovie-users.mdf" 
     providerName="System.Data.SqlClient" /> 

    <add name="MovieDBContext" 
     connectionString="Data Source=(LocalDB)\v11.0; 
          AttachDbFilename=|DataDirectory|\Movies.mdf; 
          Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

сайт работает нормально, но я не мог fingure, почему первая БД создается в папке App_Data, а второй один создается в «C: \ Program Files \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA "?! Я предположил, что оба будут созданы в App_data, потому что оба используют этот атрибут: AttachDBFilename = | DataDirectory |!

примечание: в учебнике упоминается, что он должен быть в App_Data &, они добавили скриншот, который показывает его там действительно!

Я искал ответ и попал в соучастие SQL (я думал, что пользовательские экземпляры могут быть решением), но не смог найти ответ на этот вопрос: |

(это может быть полезно прочитать о Экземпляры пользователя http://msdn.microsoft.com/en-us/library/bb264564(v=sql.90).aspx)

Любые идеи очень ценится. Заранее спасибо.

С уважением

+0

Что происходит, когда вы добавляете 'InitialCatelog' в обе строки? –

+0

Я не пробовал это, потому что моя цель не в конечном итоге сделать обе базы данных появляться под App_data; Мне нужно понять, почему VS/SQL создал их таким образом. спасибо за ваш вклад. – Alaa

ответ

15

после изучения/испытаний оказалось следующим:

VS будет смотреть на имя класса DataContext и будет выглядеть, чтобы увидеть, если вы предоставили строку соединения с тем же именем, что и класс имя; например:

public class MovieDataContext : DbContext 

и

<connectionStrings><add name="MovieDataContext" ... 

, если ему удается найти строку соответствия соединения будет создавать БД на основе критериев, указанных вами в соответствующей строке данных (для добавления DB к App_Data устанавливает путь к БД к | DataDirectory |, как показано в обеих строках соединения, упомянутых в вопросе); Если имя не совпадает или вы не указали ни одну строку соединения, VS вернется к настройкам по умолчанию и создаст БД в местоположении/настройках по умолчанию (обычно C: \ Program Files \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA).

Обратите внимание, что ни настройки «Интегрированная безопасность», ни «Начальный каталог» не играют никакой роли с этим (я смог создать БД в App_Data с интегрированной безопасностью = True & Интегрированная безопасность = SSPI и с/без начального Каталог).

Надеюсь, это поможет. Спасибо всем, кто участвовал.

0

То, что предоставил AMT, является правильным. Это было запутанно, так как использовало строки подключения с файлами .mdf и .sdf.

У меня есть для вас еще один указатель, вы можете изменить настройку по умолчанию, когда приложение ищет строку соединения с именем, соответствующим имени класса класса контекста, переопределяя конструктор DBContext и предоставляя имя параметраOrConnectionString следующим образом

public BlogsContext() 
      : base("name=EFBlogs") 
     { 
     } 

Применение затем ищет строку подключения имени EFBlogs, если он не может найти строку соединения, то он создает базу данных с именем EFBlogs, вместо BlogsContext

0

Привет. Я замечаю разницу при добавлении базы данных и спрашивает, хотите ли вы, чтобы она была помещена в папку app_data, если вы нажмете «да», то она перейдет в папку app_data, а полное имя пути к mdf также находится в app_data папку, в которой вы используете проводник файлов.