【问题标题】:ASP.NET ConnectionString AttachDbFilename=|DataDirectory|ASP.NET ConnectionString AttachDbFilename=|数据目录|
【发布时间】:2013-02-25 13:23:11
【问题描述】:

这是关于带有 Visual Studio 2012 Ultimate 和 SQL Server Express 2012 的 ConnectionStrings / ASP.NET MVC。

在此处跟进本教程: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>

该网站运行良好,但我无法弄清楚为什么第一个数据库是在 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

非常感谢任何想法。提前致谢。

问候

【问题讨论】:

  • InitialCatelog 添加到两个字符串时会发生什么?
  • 我没有尝试,因为我的目标不是最终​​让两个数据库都出现在 App_data 下;我宁愿理解为什么 VS/SQL 以这种方式创建它们。感谢您的贡献。

标签: asp.net sql connection-string


【解决方案1】:

您好,当您添加数据库时,我注意到一个区别,如果您单击“是”,它会询问您是否希望将其放置在 app_data 文件夹中,然后它会转到 app_data 文件夹,并且 mdf 的完整路径名也在使用文件资源管理器时的 app_data 文件夹。

【讨论】:

    【解决方案2】:

    经过研究/测试,结果如下:

    VS 将查看 DataContext 的类名,并查看您是否提供了与类名同名的连接字符串;例如:

    public class MovieDataContext : DbContext
    

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

    如果它设法找到匹配的连接字符串,它将根据您在相应数据字符串中指定的条件创建数据库(要将数据库添加到 App_Data,请将数据库的路径设置为 |DataDirectory|,如图所示问题中提到的连接字符串); 如果名称不匹配或者您没有提供任何连接字符串,VS 将回退到默认设置并在默认位置/设置中创建数据库(通常是 C:\Program Files \Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA)。

    请注意,“集成安全”设置和“初始目录”都不会对此发挥任何作用(我能够在 App_Data 中创建具有集成安全 = True 和集成安全 = SSPI 并且有/没有初始目录的数据库)。

    希望这会有所帮助。感谢所有参与的人。

    【讨论】:

      【解决方案3】:

      AMT 给出的完全正确。将连接字符串与 .mdf 和 .sdf 文件一起使用很令人困惑。

      我有另一个指针给你,你可以通过重写 DBContext 的构造函数并提供参数 nameOrConnectionString 来更改应用程序查找名称与上下文类的类名匹配的连接字符串的默认设置,如下所示

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

      应用程序然后搜索名为 EFBlogs 的连接字符串,如果找不到连接字符串,则它创建名为 EFBlogs 的数据库,而不是 BlogsContext

      【讨论】:

        【解决方案4】:

        我有同样的问题。我相信区别在于集成安全设置。我安装了 SQLExpress,并使用 MS SQL Server Management Studio 在其中找到了我的电影数据库。

        查看此回复以获得更好的解释。 Difference between Integrated Security = True and Integrated Security = SSPI

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-09
          • 1970-01-01
          • 2012-08-21
          • 2020-08-08
          • 1970-01-01
          • 1970-01-01
          • 2013-10-15
          • 1970-01-01
          相关资源
          最近更新 更多