ASP.NET ConnectionString AttachDbFilename=|DataDirectory| ASP.NET连接字符串AttachDbFilename=|DataDirectory|

5
这是关于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文件夹中,而第二个创建在“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 添加到两个字符串中时会发生什么? - Bhushan Firake
我没有尝试过那个,因为我的目的不是最终让两个数据库都出现在App_data下面;我更需要了解为什么VS/SQL以这种方式创建它们。感谢您的贡献。 - Alaa
4个回答

15

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

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

public class MovieDataContext : DbContext

<connectionStrings><add name="MovieDataContext" ...
如果它成功找到匹配的连接字符串,它将根据您在相应数据字符串中指定的标准创建数据库(要将DB添加到App_Data中,请将DB路径设置为“|DataDirectory|”,如问题中提到的两个连接字符串所示)。如果名称不匹配或未提供任何连接字符串,则VS将退回到默认设置,并在默认位置/设置中创建数据库(通常位于C:\ Program Files \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS \ MSSQL \ DATA中)。
请注意,"Integrated Security"设置和"Initial Catalog"对此没有任何作用(我能够使用Integrated Security = True&Integrated Security = SSPI以及有/无Initial Catalog在App_Data中创建DB)。
希望这可以帮助。感谢所有参与者。

0

0

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


0

AMT所提供的是完全正确的。使用连接字符串与.mdf和.sdf文件确实令人困惑。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接