使用netcore自带的di来使用efcore

netcore自带di的常规用法 https://www.cnblogs.com/wholeworld/p/9376137.html

 

先有db的情况下使用code first

流程:

添加类库项目

nuget 安装上 ef 反向工程需要的包,

包管理器控制台执行命令:

Scaffold-DbContext "Server=.;Database=db;uid=sa;pwd=123" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

解决方案中有任何其他项目有任何错误,都会导致 Scaffold-DbContext 命令执行失败!!需要先卸载有问题的项目,执行完命令后,再重新加载有问题的项目

命令加上 -UseDatabaseNames 可以使生成的字段名称与数据库保持一致

Scaffold-DbContext "Server=.;Database=db;uid=sa;pwd=123" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -UseDatabaseNames -ContextDir Context -Context FaceAccessContext -NoPluralize -NoOnConfiguring -Force

更多用法:

 https://docs.microsoft.com/zh-cn/ef/core/cli/powershell#scaffold-dbcontext

Scaffold-DbContext
为 DbContext 数据库的和实体类型生成代码。 为了使 Scaffold-DbContext 生成实体类型,数据库表必须具有主键。
参数:
SCAFFOLD-DBCONTEXT
参数    说明
-连接 <String>    用于连接到数据库的连接字符串。 对于 ASP.NET Core 2.x 项目,值可以是 name = <name of connection string> 。 
  在这种情况下,该名称来自为项目设置的配置源。 这是一个位置参数,并且是必需的。 -提供程序 <String> 要使用的提供程序。 通常,这是 NuGet 包的名称,例如: Microsoft.EntityFrameworkCore.SqlServer 。 这是一个位置参数,并且是必需的。 -OutputDir <String> 要在其中放置文件的目录。 路径相对于项目目录。 -ContextDir <String> 要在其中放置文件的目录 DbContext 。 路径相对于项目目录。 -命名空间 <String> 要用于所有生成的类的命名空间。 默认值为从根命名空间和输出目录生成。 在 EF Core 5.0 中添加。 -ContextNamespace <String> 要用于生成的类的命名空间 DbContext 。 注意:重写 -Namespace 。 在 EF Core 5.0 中添加。 -上下文 <String> DbContext要生成的类的名称。 -架构 <String[]> 要为其生成实体类型的表的架构。 如果省略此参数,则包括所有架构。 -表 <String[]> 要为其生成实体类型的表。 如果省略此参数,则包括所有表。 -DataAnnotations 使用属性可在可能) 的情况下配置模型 (。 如果省略此参数,则只使用 Fluent API。 -UseDatabaseNames 使用表和列的名称与数据库中显示的名称完全相同。 如果省略此参数,则更改数据库名称以更严格地符合 c # 名称样式约定。 -Force 覆盖现有文件。 -NoOnConfiguring 不生成 DbContext.OnConfiguring 。 在 EF Core 5.0 中添加。 -NoPluralize 请勿使用复数化程序。 在 EF Core 5.0 中添加。

 

 

添加网站项目,并引用上面的db项目

Startup文件

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<db1Context>(options => options.UseSqlServer(Configuration.GetConnectionString("db1")), ServiceLifetime.Transient);
            services.AddDbContext<db2Context>(options => options.UseSqlServer(Configuration.GetConnectionString("db2")), ServiceLifetime.Transient);
            services.AddControllersWithViews();
        }

控制器中使用db,有多种方式:

public IActionResult test_1([FromServices] db1Context db1, [FromServices] db2Context db2)
{
...
}
        private readonly ILogger<HomeController> _logger;
        private readonly db1Context _db1;
        private readonly db2AccessContext _db2;

        public HomeController(ILogger<HomeController> logger, db1Context db1,db2Context db2)
        {
            _logger = logger;
            _db1 = db1;
            _db2 = db2;
        }

 

posted @ 2021-11-17 17:05  毛毛虫!  阅读(94)  评论(0编辑  收藏  举报