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;
}
相关推荐
GoGeekBaird43 分钟前
Prompt、Context、Harness 工程全景图
后端
SimonKing1 小时前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
AskHarries1 小时前
MCP 基础:Server、Tool、Resource 和 Prompt
后端·程序员
长栎1 小时前
你写的 DCL 单例,在反序列化面前就是个弟弟——单例模式的破局与重建
后端
长栎1 小时前
命令模式和策略模式代码长一样——你分不清是因为你没看穿它们的本质
后端
用户298698530141 小时前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
苍何1 小时前
开源个狠活,世界杯 AI 模型竞技场!
后端
Dilee1 小时前
Spring AI 1.1.7 接入 MCP:Filesystem Server 最小 Demo
人工智能·后端
程序员小富1 小时前
我开源了一个开发者专属的智能 JSON 工具,得到了媳妇高度认可
前端·vue.js·后端