2013-03-10 61 views
5

这是关于的ConnectionStrings/ASP.NET MVC与Visual Studio 2012的最终&的SQL Server Express 2012ASP.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> 

的网站工作正常,但为什么在App_Data文件夹中创建第一个数据库,而第二个是“C创建我不能fingure出来:\ 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有用)

任何想法是极大的赞赏。提前致谢。

Regards

+0

将'InitialCatelog'添加到两个字符串时会发生什么? – 2013-03-10 09:00:11

+0

我没有尝试,因为我的目标不是最终​​使两个数据库都出现在App_data下;我需要理解为什么VS/SQL以这种方式创建它们。感谢您的贡献。 – Alaa 2013-03-10 09:58:55

回答

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的构造函数并提供参数nameOrConnectionString来更改应用程序查找连接字符串的默认设置,该连接字符串的名称与上下文类的类名相匹配然后

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

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

0

您好,我注意到添加数据库时有所不同,它会询问您是否希望将其放在app_data文件夹中,如果您单击yes,则它会转到app_data文件夹,并且mdf的完整路径名也位于app_data中文件夹,当你使用文件浏览器。