我正在使用Entity Framework的Code-First方法进行项目。事情进展顺利,直到我们改变了创建数据库的位置:
connectionString="Data Source=(LocalDB)\ProjectsV12;AttachDbFilename=|DataDirectory|\Schema.Test.mdf;Integrated Security=True;Connect Timeout=30"
然后我们设置DataDirectory
:
AppDomain.CurrentDomain.SetData("DataDirectory", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\TestDB\\");
现在,我们有几个名为SCHEMA_TEST_*
的数据库,其中*
是一个随机数字(我确定它不是随机的,但我没有#t; t弄清楚它是如何产生的。此外,我不确定导致创建另一个数据库的原因,而不是第一个创建的数据库。为什么要创建其他数据库,为什么不能像Schema.Test
中提到的那样调用connectionString
?
更新
当我删除连接字符串的AttachDbFilename
部分时,无论我做什么,它都会恢复正常。虽然,诚然,我仍然不确定如何或为什么创建额外的数据库。但是,每当模式发生变化时,似乎都会这样做。因为我们正在利用迁移,所以不应该发生这种情况。
答案 0 :(得分:1)
尝试使用如下布局创建连接字符串:
<add connectionString="Server=yourServer;Database=yourDB;Integrated Security=true" name="DefaultConnection" PoviderName="System.Data.SqlClient"/>
以下链接指向包含大量连接字符串示例的列表:http://msdn.microsoft.com/en-us/library/jj653752%28v=vs.110%29.aspx
答案 1 :(得分:1)
您已使用以下代码设置了DataDirectory:
AppDomain.CurrentDomain.SetData("DataDirectory",
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
+ "\\TestDB\\");
因此,您的DataDirectory值有效someval\\TestDB\\
您在connectionString中使用
AttachDbFilename=|DataDirectory|\Schema.Test.mdf;
因此,最终的DbFilename来到someval\\TestDB\\\Schema.Test.mdf
?注意Schema.Test.mdf
\
我不确定这一点,但只是一个普遍的观察建议,这个可能成为一个问题。
答案 2 :(得分:1)
这段代码将关闭实体框架以监控您的架构更改。完成此操作后,您必须自行修改架构更改。
链接: http://msdn.microsoft.com/en-us/data/jj556205.aspx
Stop Entity Framework from modifying database
DbContext = new DataContext();
DbContext.Configuration.AutoDetectChangesEnabled = false;