.Net如何将DBContext绑定到特定数据库

时间:2014-05-16 04:15:16

标签: .net entity-framework c#-4.0 dbcontext

我正在学习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的关联,有没有办法找到/编辑或删除它,以便我可以重新创建一个与前一个同名的数据库?

非常感谢您阅读这个长期的问题。

3 个答案:

答案 0 :(得分:0)

  

问题1:这不是一个正确的连接字符串吗?

这是正确的。

  

问题2:.Net在哪里保持DBCOntext与DB的关联,有没有办法找到/编辑或删除它,以便我可以重新创建一个与前一个同名的数据库?

您需要确保重新创建具有相同名称的数据库

  
      
  1. 首先转到Visual Studio中的Server Explorer,检查此项目的“.mdf”数据连接是否已连接,如果是,请右键单击并删除。

  2.   
  3. 转到解决方案资源管理器,单击“显示所有文件”图标。

  4.   
  5. 转到App_Data,右键单击并删除此项目的所有“.mdf”文件。

  6.   

(并确保删除所有迁移相关文件夹和文件,如果您使用了迁移)

答案 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中定义的连接字符串。

希望它有所帮助。