• .NET Core/.NET6 使用DbContext 连接数据库,SqlServer


    安装以下NuGet包

    Microsoft.EntityFrameworkCore.SqlServer:SQL server 需要添加包
    Microsoft.EntityFrameworkCore.Tools
    Newtonsoft.Json:用于Json格式转换

    创建一个实体类来表示数据库表。在项目中创建一个名为Customer.cs的文件,并添加以下代码

    1. namespace AliWorkbenchProgram.Models
    2. {
    3. public class Customer
    4. {
    5. public int Id { get; set; }
    6. public string Name { get; set; }
    7. public string Email { get; set; }
    8. }
    9. }

    创建一个数据库上下文类,用于定义实体类和数据库连接配置。在项目中创建一个名为AppDbContext.cs的文件,并添加以下代码:

    1. using AliWorkbenchProgram.Models;
    2. using Microsoft.EntityFrameworkCore;
    3. namespace AliWorkbenchProgram.DB
    4. {
    5. public class AppDbContext : DbContext
    6. {
    7. public AppDbContext(DbContextOptions options) : base(options)
    8. {
    9. }
    10. public DbSet Customers { get; set; }
    11. }
    12. }

    接下来,配置数据库连接。打开appsettings.json文件,并添加以下内容:

    1. {
    2. "ConnectionStrings": {
    3. "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=EFCoreDemo;Trusted_Connection=True;MultipleActiveResultSets=true"
    4. },
    5. "Logging": {
    6. "LogLevel": {
    7. "Default": "Information",
    8. "Microsoft.AspNetCore": "Warning"
    9. }
    10. },
    11. "AllowedHosts": "*"
    12. }

    然后,在Startup.cs文件的ConfigureServices方法中添加以下代码,用于配置数据库上下文的依赖注入:

    创建类 DbEntitys 继承 DbContext

    添加包并引用
    using Microsoft.EntityFrameworkCore;

    1. using AliWorkbenchProgram.Models;
    2. using Microsoft.EntityFrameworkCore;
    3. namespace AliWorkbenchProgram.DB
    4. {
    5. public class DbEntitys : DbContext
    6. {
    7. ///
    8. /// 配置连接字符串,每次访问数据库之前会自动执行此方法,在这里配置连接字符串
    9. /// 相当于连接前事件
    10. /// 使用 IOC 注入的方式不实现此方法
    11. ///
    12. ///
    13. protected override void OnConfiguring(DbContextOptionsBuilder builder)
    14. {
    15. // 连接字符串
    16. string ConnString = "xxx";
    17. // 连接SqlServer
    18. builder.UseSqlServer(ConnString);
    19. // 连接MySql
    20. //builder.UseMySql(ConnString,new MySqlServerVersion(new Version()));
    21. }
    22. ///
    23. /// 默认构造函数 使用方法与原来一样
    24. ///
    25. public DbEntitys() : base() { }
    26. ///
    27. /// 通过IOC
    28. ///
    29. ///
    30. public DbEntitys(DbContextOptions options) : base(options)
    31. { }
    32. /*
    33. ///
    34. /// 无主键 视图
    35. ///
    36. ///
    37. protected override void OnModelCreating(ModelBuilder builder)
    38. {
    39. //指定主键字段,如果主键名称是id/Id/ID,可以省略
    40. builder.Entity().HasKey("Key");
    41. //指定为无主键或视图,不然可能会报错
    42. builder.Entity().HasNoKey();
    43. builder.Entity().HasNoKey();
    44. }
    45. //表映射
    46. public virtual DbSet Tab1 { get; set; }
    47. public virtual DbSet Tab2 { get; set; }
    48. */
    49. //表映射
    50. public virtual DbSet Students { get; set; }
    51. //public virtual DbSet Tab2 { get; set; }
    52. }
    53. }

    使用

    IOC

    在 Program.cs

    1. // ↓↓↓↓↓ 在此范围内 ↓↓↓↓↓
    2. var ConnString = "xxx";
    3. //注入
    4. builder.Services.AddDbContext(x => x.UseSqlServer(ConnString));
    5. // ↑↑↑↑↑ 在此范围内 ↑↑↑↑↑

    在控制器 xxxController

    1. //
    2. /// 数据库操作实例
    3. ///
    4. private readonly DbEntitys _context;
    5. ///
    6. /// 构造函数获取实例
    7. ///
    8. ///
    9. public StudentController(DbEntitys db)
    10. {
    11. _context = db;
    12. }
    13. [HttpGet(Name = "GetData")]
    14. public IEnumerable Get()
    15. {
    16. //查询数据
    17. return _context.Students.ToList();
    18. }

  • 相关阅读:
    CSS三栏布局的7种方式代码详解 | 圣杯布局 | 双飞翼布局 | 弹性盒子
    Web前端大作业——基于HTML+CSS+JavaScript仿英雄联盟LOL游戏网站
    50个渗透(黑客)常用名词及解释
    类和对象12:容器方法
    【CPP】指针
    Spring Bean 生命周期详解
    Wireshark-win32-1.8.4 给winxp和win2003用
    WordPress简单好看的线报主题模板源码
    搭建Android自动化python+appium环境
    Vim编辑器
  • 原文地址:https://blog.csdn.net/zgscwxd/article/details/133856409