如何在 API 项目中指定 Entity Framework 连接字符串

How to specify an Entity Framework Connection String in API Project

问题:如何在 .NET API 中指定 Entity Framework 连接字符串?

我习惯于创建一个 DAL class 并像我在这里所做的那样指定基本连接字符串。

    public class LocalContext : DbContext
    {
        public LocalContext() : base("LocalDBContext")
        {
        }

        public DbSet<Weapons> Weapons { get; set; 
    }

依次从 web.config 或 appsettings.json 中获取 LocalDBContext 连接字符串。

  "ConnectionStrings": {
    "LocalDBContext": "Server=.;Database=Weapons;Trusted_Connection=True;"
  },

这是我过去在各种网络应用程序中所做的,但不确定我是否必须对 API 做一些不同的事情?

我希望它调用并保存到“Server=”的“Weapons”中。然而,它反而在“(localdb)\mssqllocaldb”的连接处创建了一个名为“LocalDBContext”的新数据库。任何提示将不胜感激!

给定的字符串 "LocalDBContext" 被解释为连接字符串,参见 official Documentation on DbContext(String).

做类似的事情:

    public class LocalContext : DbContext
    {
        public LocalContext (DbContextOptions<LocalContext> options)
            : base(options)
        {
        }
     ....

我有以下问题:

问题:

  1. 您是否在 API 解决方案中添加了实体数据模型?
  2. 如果是,你在添加 EDM 时没有在配置文件中保存连接字符串吗?

在解决方案中添加 EDMX 时,模型 window 要求连接数据库。一旦 EDM 连接到数据库,它会要求将连接字符串保存在配置文件中。您可以添加表、函数、SP、视图。通过这种方式,EDM 连接到实际数据库,而不是选择不同的数据库。

在 EF 核心中,您不需要使用构造函数向基础 class 发送连接,只需遵循以下方法:

public partial class LocalContext : DbContext
{
 public LocalContext ()
 {
 }

public LocalContext(DbContextOptions<LocalContext> options) : 
  base(options)
{
}

public virtual DbSet<Weapon> Weapons { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (!optionsBuilder.IsConfigured)
    {
        //warning You can move this code to protect potentially sensitive 
          information
        //in connection string.

        optionsBuilder.UseSqlServer("Data Source= .;Initial
                       Catalog=Weapons;Trusted_Connection=True;");
      }
   }
}