为什么Entity不断创建新数据库?

时间:2014-04-28 20:06:29

标签: sql entity-framework

我正在使用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部分时,无论我做什么,它都会恢复正常。虽然,诚然,我仍然不确定如何或为什么创建额外的数据库。但是,每当模式发生变化时,似乎都会这样做。因为我们正在利用迁移,所以不应该发生这种情况。

3 个答案:

答案 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;