【问题标题】:How does .Net binds DBContext to specific database.Net 如何将 DBContext 绑定到特定数据库
【发布时间】:2014-07-04 17:52:01
【问题描述】:

我正在学习 EF Code first 方法并遵循本教程http://msdn.microsoft.com/en-US/data/jj193542。首次运行应用程序时,它在 C:\Users\User123\ 目录中创建了一个数据库,并将记录添加到 Blogs 表中。然后我注释了代码以将记录添加到数据库并正确检索记录。

然后我想把数据库移动到项目下的一个文件夹中,所以我把它从C:\Users剪切到项目中一个名为Data的文件夹中,并在app.config中添加了一个连接字符串,并在BloggingContext中使用了连接字符串的名称像这样的构造函数

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 会重新创建数据库。但令我惊讶的是,这次它没有创建数据库。但是,如果我将数据库上下文名称从 BloggingContext 更改为 BloggingContext_New (或其他),它会再次创建数据库。

每次我输入一个新名称时,它都会创建一个新数据库,但是当我输入 BloggingContext 时,它不会创建数据库。所以,我还有一个问题

问题 2:.Net 在哪里保持 DBCOntext 与 DB 的关联,有什么方法可以查找/编辑或删除它,以便我可以重新创建与前一个名称相同的 DB?

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

【问题讨论】:

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


    【解决方案1】:

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

    这是正确的。

    问题 2:.Net 在哪里保持 DBCOntext 与 DB 的关联,有什么方法可以查找/编辑或删除它,以便我可以重新创建与前一个名称相同的 DB?

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

    1. 首先进入Visual Studio中的Server Explorer,检查该项目的“.mdf”数据连接是否连接,如果连接,右键删除。

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

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

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

    【讨论】:

      【解决方案2】:

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

      如果您的项目结构中有数据库文件,它将在您构建/重建时在调试文件夹中重新创建该文件。

      这就是为什么当你手动从输出编译文件夹中删除文件时,如果不重新编译就运行程序会导致连接错误。

      连接字符串没问题。

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

      如果您想要自定义行为,您需要告诉 DbContext 您管理 DB 文件的策略。

      例如,我们在其中一个系统中使用以下代码,每次应用程序启动时都会删除并创建数据库:

          static EntityContext()
          {
              Database.SetInitializer<EntityContext>(new DbInitializer());
              using (EntityContext db = new EntityContext())
                  db.Database.Initialize(false);
          }
      
          class DbInitializer : DropCreateDatabaseAlways<EntityContext>
          {
          }
      

      而对于关联,如果你没有为 DbContext 定义连接字符串,它将使用 app.config 中定义的那个。

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        当你说你将它移动到一个名为 data 的文件夹中时,你的意思是你创建了一个名为 data 的文件夹并将它放在那里吗? |数据目录|连接字符串中的部分专门指 Web 项目中存在的 app_data 文件夹。如果没有,则需要右键单击 Web 项目并选择添加 -> ASP.NET 文件夹并选择 App_Data。 每当发生此类问题时,它几乎总是权限问题。将此站点部署到托管提供商(例如 Azure)时要小心,IIS 进程将没有对此文件夹的写入权限,因此最好在创建数据库后将其包含在项目中。您可以通过单击解决方案资源管理器顶部的显示所有文件图标、展开 app_data 文件夹并右键单击 .mdf / .sdf 并选择包含在项目中来做到这一点

        【讨论】:

        • 最好在创建数据库后将其包含在项目中。 .你的意思是,只是为了确保数据库放在 App_data 文件夹中?还是需要执行其他操作?
        猜你喜欢
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 2013-03-16
        • 1970-01-01
        相关资源
        最近更新 更多