我正在学习EF Code第一种方法并遵循本教程http://msdn.microsoft.com/en-US/data/jj193542。当应用程序第一次运行时,它在C:\ Users \ User123 \目录中创建了一个数据库,并将记录添加到了Blogs表中。然后我评论了将记录添加到数据库并正确检索记录的代码。
然后我想将数据库移动到项目下的文件夹中,所以我将它从C:\ Users切换到项目中名为Data的文件夹,并在app.config中添加了一个连接字符串,并在BloggingContext中使用了connectionstring的名称像这样的构造函数
public BloggingContext () : base("MyConnection")
这是连接字符串:
name="MyConnection"
providerName="System.Data.SqlClient"
connectionString="Data Source=(localdb)\v11.0;AttachDbFileName=|DataDirectory|\MyDB.mdf; Initial Catalog=MyDB;Integrated Security=True;MultipleActiveResultSets=True"
但是当我运行应用程序时,它表示无法连接。所以:
问题1:这不是一个正确的连接字符串吗?
然后我从项目中删除了数据库,认为BloggingContext将重新创建数据库。但令我惊讶的是,这次没有创建数据库。但是,如果我将db上下文名称从BloggingContext更改为BloggingContext_New(或其他一些),则会再次创建数据库。
每次我添加新名称时都会创建一个新数据库,但是当我放置BloggingContext时,它不会创建数据库。所以,我有另一个问题
问题2:.Net在哪里保持DBCOntext与DB的关联,有没有办法找到/编辑或删除它,以便我可以重新创建一个与前一个同名的数据库?
非常感谢您阅读这个长期的问题。
答案 0 :(得分:0)
问题1:这不是一个正确的连接字符串吗?
这是正确的。
问题2:.Net在哪里保持DBCOntext与DB的关联,有没有办法找到/编辑或删除它,以便我可以重新创建一个与前一个同名的数据库?
您需要确保重新创建具有相同名称的数据库
首先转到Visual Studio中的Server Explorer,检查此项目的“.mdf”数据连接是否已连接,如果是,请右键单击并删除。
转到解决方案资源管理器,单击“显示所有文件”图标。
- 醇>
转到App_Data,右键单击并删除此项目的所有“.mdf”文件。
(并确保删除所有迁移相关文件夹和文件,如果您使用了迁移)
答案 1 :(得分:0)
当你说你把它移到一个名为data的文件夹时,你的意思是你创建了一个名为data的文件夹并把它放在那里吗? | DataDirectory |连接字符串中的部分特指Web项目中存在的app_data文件夹。如果您没有,则需要右键单击Web项目并选择add - > ASP.NET文件夹并选择App_Data。 每当出现此类问题时,它几乎总是一个权限问题。将此站点部署到托管提供程序(例如Azure)时要小心,IIS进程将无法对此文件夹具有写入权限,因此最好在创建项目后将数据库包含在项目中。您可以通过单击解决方案资源管理器顶部的显示所有文件图标,展开app_data文件夹并右键单击.mdf / .sdf并选择项目中的include来实现此目的
答案 2 :(得分:0)
问题1:这不是一个正确的连接字符串吗?
如果在项目结构中有数据库文件,它将在构建/重建时在debug文件夹中重新创建文件。
这就是为什么当您手动从输出编译文件夹中删除文件时,如果您在不重新构建的情况下运行程序,则会导致连接错误。
连接字符串正常。
问题2:.Net在哪里保持DBCOntext与DB的关联 有任何方法可以找到/编辑或删除它,以便我可以重新创建一个 与前一个名称相同的DB?
如果您想要自定义行为,您需要告诉DbContext管理数据库文件的策略。
例如,我们在我们的一个系统中使用以下代码,每次应用程序启动时都会删除并创建数据库:
static EntityContext()
{
Database.SetInitializer<EntityContext>(new DbInitializer());
using (EntityContext db = new EntityContext())
db.Database.Initialize(false);
}
class DbInitializer : DropCreateDatabaseAlways<EntityContext>
{
}
对于关联,如果没有为DbContext定义连接字符串,它将使用app.config中定义的连接字符串。
希望它有所帮助。