Asp.net core 使用EntityFrame Work

安装以下Nuget 包

Microsoft.EntityFrameworkCore.Tools

Microsoft.EntityFrameworkCore.Design

Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore

Microsoft.EntityFrameworkCore.SqlServer或者Npgsql.EntityFrameworkCore.PostgreSQL

安装完上述Nuget包之后,在appsettings配置文件中配置连接字符串.如下:

XML 复制代码
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "anna": "Host=10.10.11.185;Port=5432;Database=Films;Username=postgres;Password=money13;"
  }
}

之后,在程序包管理控制台,执行下述命令,即可生成DbContext/ Model,注意,同步修改连接字符串/生成目录等.

bash 复制代码
Scaffold-DbContext 'Name=ConnectionStrings:anna' Npgsql.EntityFrameworkCore.PostgreSQL -OutputDir Models -ContextDir Context -Context FilmContext

如果修改了数据库,需要再次生成,执行如下命令:

bash 复制代码
Scaffold-DbContext 'Name=ConnectionStrings:anna' Npgsql.EntityFrameworkCore.PostgreSQL -OutputDir Models -ContextDir Context -Context FilmContext -Force

上述代码,只能在Asp.net Core项目中运行。如果EF放到类库中,无Asp.Net Core环境,运行上述脚本,报错

A named connection string was used, but the name 'ConnectionStrings:anna' was not found in the application's configuration. Note that named connection strings are only supported when using 'IConfiguration' and a service provider, such as in a typical ASP.NET Core application. See https://go.microsoft.com/fwlink/?linkid=850912 for more information.

提示未找到连接字符串,经过检索,问DeepSeek,发现是脱离Asp.Net Core环境执行上述脚本,会导致无法获取连接字符串。

解决方案是,直接在脚本中写明连接字符串。如下:

bash 复制代码
Scaffold-DbContext "Host=192.168.11.185;Database=money2DB;Username=postgres;Password=mm123;" Npgsql.EntityFrameworkCore.PostgreSQL -OutputDir Models -ContextDir Context -Context OM2Context

执行完上述操作后,即配置完EF环境.

在Program.cs中,添加下述代码,配置EF

cs 复制代码
builder.Services.AddEntityFrameworkNpgsql();
builder.Services.AddDbContext<FilmContext>(options =>
    options.UseNpgsql(builder.Configuration.GetConnectionString("anna")));

之后,在控制器中通过注入的方式,使用DbContext ,注意,如果通过new的方式实例化,会报错.

cs 复制代码
private readonly FilmContext _context;

public SecondController(ILogger<SecondController> logger, FilmContext context)
{
    this.logger = logger;
    logger.LogInformation($"{this.GetType()} 被构造了");
    _context = context;
}
相关推荐
Victor3563 分钟前
Hibernate(29)什么是Hibernate的连接池?
后端
Victor3563 分钟前
Hibernate(30)Hibernate的Named Query是什么?
后端
源代码•宸30 分钟前
GoLang八股(Go语言基础)
开发语言·后端·golang·map·defer·recover·panic
czlczl2002092530 分钟前
OAuth 2.0 解析:后端开发者视角的原理与流程讲解
java·spring boot·后端
颜淡慕潇38 分钟前
Spring Boot 3.3.x、3.4.x、3.5.x 深度对比与演进分析
java·后端·架构
布列瑟农的星空38 分钟前
WebAssembly入门(一)——Emscripten
前端·后端
小突突突2 小时前
Spring框架中的单例bean是线程安全的吗?
java·后端·spring
iso少年2 小时前
Go 语言并发编程核心与用法
开发语言·后端·golang
掘金码甲哥2 小时前
云原生算力平台的架构解读
后端
码事漫谈2 小时前
智谱AI从清华实验室到“全球大模型第一股”的六年征程
后端