原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/30/mvc4_vs2012_login_member_db.aspx
原本是在MSDN论坛上看见的问题
因为写书过程中也遇见了,不能解。
就发信请微软技术支持团队帮忙
隔了很久,他们很热心地追踪这个问题,也一直来电讨论、报告进度。
希望这份问与答,对大家有帮助。
让这份信息分享出来,能发挥更多力量。
==================================================================================
问题定义:
使用Win 7 + VS 2012 Ultimate (Update 2版) + SQL 2012 Express(SP1),选取ASP.NET MVC 4 专案(Project),完整专案(不是「空」专案)。
点选上方「专案」Menu =>「 ASP.NET组态」,设定Login会员数据库。
在「 ASP.NET组态」网页画面上,加入账号、群组(角色)之后,
[问题一]:我发现项目的/bin目录下,竟然出现旧版的ASPNETDB.MDF数据库档案。
而非 Web.config文件里面,预设的联机字符串(应该使用SQL 2012 Express版的LocalDB才对)。理论上,应该是aspnet-WebSite3-20130507194034.mdf档案。
<connectionStrings>
<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-WebSite3-20130507194034;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-WebSite3-20130507194034.mdf" />
</connectionStrings>
[问题二]:此时,我按下上方的绿色三角按钮(Play)建构专案。
预设的ASP.NET MVC 4项目,执行成果(网页右上方)会有「注册」功能。
我注册一个新的账号以后,很奇怪的!这个账号却会跑进SQL 2012 LocalDB里面。也就是aspnet-WebSite3-20130507194034.mdf。
综合上面两个问题,我在同一个MVC 4「项目」里面,产生的 Login会员数据,
却分别存于/bin目录下「两套」数据库里面。
似乎不合理。
....................................................................
我自己测试:
(1). 打开一个「网站」,ASP.NET MVC4的网站,就不会有这样的错误了。也就是错误只发生在「项目」里面。
(2).在「项目」里面,即使我设定了 C:\Windows\Microsoft.NET目录下的 aspnet_regsql.exe,输入SQL 2012的LocalDB连结字符串(如(LocalDb)\v11.0),仍无法把上面(问题一)的Login数据库导回SQL 2012 LocalDB里面,一样会出现「项目」的 /bin目录下--两套数据库档案,分别存放不同的登入账号。
因为MVC 4项目太大,无法上传给您参考。
我并没有撰写新的程序代码,只是「新增」一个MVC 4项目,就发现问题了。VB / C#两种语法都测试过。
P.S. 从VS 2012 、Update 1~3版都有一样的情况。
==================================================================================
问题分析:
因为Visual Studio 2012在安装的时候,会将LocalDB的功能也一同安装进去,让在没有安装SQL Express 2012的环境也能使用这个功能。
另外,ASP.NET Configuration开启的是C:\Windows\Microsoft.NET\Framework\v4.0.30319\ASP.NETWebAdminFiles底下的网站:
他会读取C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config里面的连接字符串设定:
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
这个部分和MVC4项目web.config使用的连接字符串是不同的:
<connectionStrings>
<add name="LocalSqlServer" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MvcApplication2-20130517155009;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MvcApplication2-20130517155009.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
这是导致项目底下出现 旧版aspnetdb.mdf的主因。