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;
}
相关推荐
大型UFO1 小时前
在 Hermes Agent 里搭建全中文 Honcho 记忆系统踩过的坑
后端
前端工作日常2 小时前
我学习到的Java概念
java·后端
要阿尔卑斯吗2 小时前
深入解析 Docling Java SDK 集成:Source 与 Target 的实战应用
后端
范闲4 小时前
第三章: 从 ChatModel 到 Agent:Octo 项目的架构演进
后端
江华森4 小时前
深入理解 Flask 实现原理
后端·python·flask
Nturmoils4 小时前
LEFT JOIN 到底什么时候会被优化器偷偷改写成 INNER JOIN
后端
北冥you鱼5 小时前
Go Modules 使用指南:从入门到精通
开发语言·后端·golang
嘟嘟07175 小时前
从零理解 MCP:手写一个本地 MCP Server 并接入 LangChain Agent
前端·后端
沈七5 小时前
Go 补强第三天:给 TaskStore 写单元测试
后端