• 添加EF


    一、项目配置

    1、添加类库,Models和Repository,目标框架.net 5.0

    2、将WebApp设置为启动项,

    3、添加项目之间的引用,

    在Repository类库中引用Models类库,在AppWeb应用程序中引用Repository类库(不用引用Models类库也同样能使用Models下的类,因为Repository类库已经引用了Models类库,它们有级联依赖关系)

    二、安装Entity Framework Core相关包

    1、需要安装的包

    a、Microsoft.EntityFrameworkCore.SqlServer

    b、Microsoft.EntityFrameworkCore.Tools   //Microsoft.EntityFrameworkCore.Tools包中会包含Microsoft.EntityFrameworkCore.Design包

    注意事项(安装位置):在Repository类库中通过NuGit安装两个包

    2、第一种方式:命令安装

    在包管理器控制台 (PMC) 中,输入以下命令来添加 NuGet 包:

    //Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore NuGet 包提供 EF Core 错误页的 ASP.NET Core 中间件。 此中间件有助于检测和诊断 EF Core 迁移错误。
    Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
    Install-Package Microsoft.EntityFrameworkCore.SqlServer
    Install-Package Microsoft.EntityFrameworkCore.Tools

     

    3、第二种:NuGet方式安装

    在类库Repository上,右键"管理NuGet程序包"

    模糊查找需要添加的程序包:Microsoft.EntityFrameworkCore

     

    安装完成后

    三、安装Entity Framework Core相关包

    1、创建数据模型

    首先,在Model类库中新建ReceivedMoney和InvoiceDetail两个实体类,引用DataAnnotations 命名空间,添加字段特性

    常用属性
    [Required]
    [StringLength(50)]
    [Display(Name = "First Name")]
    [Column("FirstName")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]

    2、数据映射

    在Repository类库中,建立一个AppDbContext类,这个类需要继承DbContext基类,添加Microsoft.EntityFrameworkCore的引用。AppDBcontext中包括包含了所有逻辑,比如与数据库交互、数据变化追踪等。

        public class AppDbContext : DbContext
        {
            public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
            {
            }
        }

    为让三个Model能在Context中正常工作,将三个Model暴露成DbSet类型

        public class AppDbContext : DbContext
        {
            public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
            {
            }
            public DbSet<ReceivedMoney> ReceivedMoneys { get; set; }
            public DbSet<InvoiceDetail> InvoiceDetails { get; set; }
            public DbSet<InvoiceMoney> InvoiceMoneys { get; set; }
    
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<ReceivedMoney>().ToTable("ReceivedMoney");
                modelBuilder.Entity<InvoiceDetail>().ToTable("InvoiceDetail");
                modelBuilder.Entity<InvoiceMoney>().ToTable("InvoiceMoney");
    
                //modelBuilder.Entity<InvoiceDetail>()
                //    .HasKey(i => new {i.InvoiceCode , i.InvoiceNumber });
            }
        }
    View Code

    当数据库创建完成后, EF 创建一系列数据表,表名默认和 DbSet 属性名相同。 集合的属性名通常采用复数形式。 例如,使用 Students,而不使用 Student。

    OnModelCreating方法,在 DbContext 中指定单数形式的表名称会覆盖默认行为。


    三个Model写好后,还需要将类映射到数据中,也就是映射数据库的三个表,与数据库连接就需要数据库连接字符串
    在WebApi应用程序中的appsettings.json文件中添加如下配置:

      "ConnectionStrings": {
        "DefaultConnection": "Server=127.0.0.1;Database=XXX;uid=sa;password=1234"
      },

    在Startup类的ConfigureServices方法下注入数据库上下文依赖

            public IConfiguration Configuration { get; }
    
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllersWithViews();
                //services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
                services.AddDbContext<AppDbContext>(options => options.UseSqlServer("server=127.0.0.1;database=XXX;uid=sa;pwd=1234", b => b.MigrationsAssembly("WebApp")));
    
            }

  • 相关阅读:
    微服务架构中的熔断 VS 股票市场中的熔断
    通过异常处理错误
    Java之GC 如何工作
    HBase学习笔记
    日志打印的正确姿势
    告别if/else连环写法
    下载resource下的excel文件
    get请求和post请求参数中文乱码的解决办法
    jquery基础
    45度炸队Alpha冲刺博客集
  • 原文地址:https://www.cnblogs.com/shiliumu/p/15386575.html
Copyright © 2020-2023  润新知