【问题标题】:.NET core - read connection string into Entity Framework Core.NET 核心 - 将连接字符串读入 Entity Framework Core
【发布时间】:2020-01-07 19:32:23
【问题描述】:

我的项目结构很标准:

EFData内。

EFData 是一个 Entity Framework Core 类库,用于隔离所有数据库交互。数据库模型,还有我的DBContext。我是这样构建的,因此它与数据库环境无关。

API项目当然有参考EFData

如何将连接字符串从API 中的Startup.cs 传递到EFData 中的DBContext.cs

我已经阅读了多篇文章,这些文章引用了与我的设置不同的设置,我可能期望在我的EFData 项目中使用Startup.cs。我没有那个。

Startup.cs 内,我确实有我认为是必需的行 -

services.AddDbContext<DBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

但是EFData 对那个连接字符串一无所知。

【问题讨论】:

  • EFData 不需要启动文件。如果您将 AddDbContext 调用放入 API 内的启动文件中,该 GetConnectionString 调用会返回什么值?您的 appsettings 文件是否有一个具有该名称的连接字符串?
  • 返回的连接字符串是我根据我的环境所期望的。是的,与该环境对应的 appsettings 与该名称有关联。 @ShaneBauer
  • 如果没有看到您打算如何使用 DBContext 类,这将很难回答。您的代码如何在 API 项目中使用该上下文?
  • 我所有的数据库交互都在我希望与 API 代码分开的类库中

标签: c# entity-framework-core asp.net-core-2.1


【解决方案1】:

获取连接和构建数据库的步骤

  1. 在 API 项目中添加对 EFData 项目的引用 - 通过在 API项目,点击依赖部分并添加 引用您的 EFData 类库。
  2. 然后在您的 api 项目中添加到您的启动类,并确保连接字符串在您的 ConfigureServices 方法或类似方法中

您的连接字符串看起来不错,只需确保您的数据库连接字符串正确。

Here 是一个链接,如果您需要更多信息

【讨论】:

  • 我的EFData项目没有startup.cs
  • 你的 APi 项目有吗?
  • 是的,我的 API 项目有一个 Startup.cs
  • 所以你需要做 3 件事; 1. 在您的 API 项目中,在 Visual Studio 中展开该部分(我假设来自屏幕截图),然后右键单击“依赖项”项,然后您将看到“添加引用”选项,在那里您将看到一个列表解决方案中的项目并选择 EFData。现在,您在启动时初始化的 API 项目可以在您运行项目时初始化 EFData 类库。
  • 2.然后您需要进入您的启动类并在 ConfigureServices 方法中添加您拥有的连接字符串,然后您需要引用 DBContext 3 的名称空间。最后,您需要确保正确的连接字符串在您的 appsettings 中.json 文件,名称为“DefaultConnection”,因此可以在启动时获取它您可能需要运行迁移等来构建数据库,但这应该可以让您到达您需要的地方
【解决方案2】:

一种方法是在 DBContext.cs 类中添加 ConnectionString 属性,然后在 API 项目的 startup.cs 上显式设置它。 在 DBcontext.cs 中添加如下代码

   using System;
   using System.Data.SqlClient;

   using Microsoft.EntityFrameworkCore;

   public class DBContext 
   {
       public static void SetConnectionString(string connectionString)
       {
           if (ConnectionString == null)

           {
               ConnectionString = connectionString;
           }
           else
           {
               throw new Exception();
           }
       }
       // this part will help you to open the connection
       public static SqlConnection OpenConnection()
       {
           SqlConnection connection = new SqlConnection(ConnectionString);
           connection.Open();
           return connection;
       }

       private static string ConnectionString { get; set; }

       //add the connectionString to options

         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
       {
           if (!optionsBuilder.IsConfigured)
           {
               optionsBuilder.UseSqlServer(ConnectionString);
           }
       }
   }

现在,在 API 项目中添加 EFData 项目的引用,并在 startup.cs 文件中设置 ConnectionString

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            var connectionString = this.Configuration.GetConnectionString("DBName");
            Namespace.DBContextContext.SetConnectionString(connectionString); //replace namespace with the namespace suitable for your solution

            //here goes rest of your default code
        }

这样你应该可以在你的 API 项目中访问 Connection。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2019-03-10
    • 2023-03-18
    • 1970-01-01
    • 2019-09-22
    • 2022-10-25
    • 1970-01-01
    相关资源
    最近更新 更多