如何在 API 项目中指定实体框架连接字符串

Posted

技术标签:

【中文标题】如何在 API 项目中指定实体框架连接字符串【英文标题】:How to specify an Entity Framework Connection String in API Project 【发布时间】:2021-09-10 12:53:29 【问题描述】:

问题:如何在 .NET API 中指定实体框架连接字符串?

我习惯于像这里一样创建一个 DAL 类并指定基本连接字符串。

    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”的新数据库。任何提示将不胜感激!

【问题讨论】:

【参考方案1】:

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

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;");
      
   

【讨论】:

【参考方案2】:

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

执行以下操作:

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

【讨论】:

【参考方案3】:

我有一些问题如下:

问题:

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

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

【讨论】:

以上是关于如何在 API 项目中指定实体框架连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NpgSql 连接字符串中指定 ApplicationName

如何在实体框架中指定索引提示?

如何在C#中获取连接字符串中指定的Mongo数据库

如何让asp.net成员提供者和实体框架共享同一个数据库

如何在 ODBC 连接字符串中指定网络目录?

将ASP.NET Identity模型移动到类库