5

这是关于带有 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

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

问候

4

4 回答 4

15

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

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 并且有/没有初始目录的数据库)。

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

于 2013-03-19T10:15:34.353 回答
0

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

查看此响应以获得更好的解释。Integrated Security = True 和 Integrated Security = SSPI 之间的区别

于 2013-03-12T17:35:22.593 回答
0

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

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

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

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

于 2013-04-23T14:50:23.137 回答
0

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

于 2017-03-09T01:19:39.483 回答