ASP.NET ConnectionString AttachDbFilename = | DataDirectory |

时间:2013-03-10 08:36:31

标签: asp.net sql connection-string

这是关于ConnectionStrings / ASP.NET MVC与Visual Studio 2012 ultimate& SQL Server Express 2012。

在这里继续本教程: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文件夹中创建的,而第二个数据库是在&#34; C:\ Program Files \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS中创建的\ MSSQL \ DATA&#34;?!我认为两者都将在App_data中创建,因为它们都使用了这个属性:AttachDBFilename = | DataDirectory |!

注意:教程提到它应该在App_Data&amp;他们添加了截图,确实显示了它!

我一直在寻找答案并加入了SQL的共谋(我认为用户实例可能是解决方案)但是无法找到答案:|

(这可能有助于阅读用户实例http://msdn.microsoft.com/en-us/library/bb264564(v=sql.90).aspx

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

此致

4 个答案:

答案 0 :(得分:15)

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

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

public class MovieDataContext : DbContext

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

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

请注意,“集成安全性”设置和“初始目录”都不会扮演任何角色(我能够在App_Data中创建数据库,其中集成安全性=真实和集成安全性= SSPI并且有/无初始化目录)。

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

答案 1 :(得分:0)

我有同样的问题。我相信不同之处在于集成安全设置。我安装了SQLExpress,并使用MS SQL Server Management Studio在那里找到了我的Movies数据库。

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

答案 2 :(得分:0)

AMT给出的是完全正确的。这是令人困惑的,因为它是使用.mdf和.sdf文件的连接字符串。

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

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

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

答案 3 :(得分:0)

您好我注意到添加数据库时存在差异,如果您单击是,则要求将其放在app_data文件夹中然后它会转到app_data文件夹,并且mdf的完整路径名也在你使用文件浏览器的app_data文件夹。

相关问题