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;
}
相关推荐
布列瑟农的星空2 小时前
前端都能看懂的Rust入门教程(三)——控制流语句
前端·后端·rust
汤姆yu2 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
暮色妖娆丶2 小时前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
野犬寒鸦2 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
Java编程爱好者2 小时前
Seata实现分布式事务:大白话全剖析(核心讲透AT模式)
后端
神奇小汤圆2 小时前
比MySQL快800倍的数据库:ClickHouse的性能秘密
后端
小小张说故事3 小时前
BeautifulSoup:Python网页解析的优雅利器
后端·爬虫·python
怒放吧德德3 小时前
后端 Mock 实战:Spring Boot 3 实现入站 & 出站接口模拟
java·后端·设计
biyezuopinvip3 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
UrbanJazzerati3 小时前
Python编程基础:类(class)和构造函数
后端·面试