zoukankan      html  css  js  c++  java
  • .NetCore中使用EF Core

    1、安装nuget包

    Install-package Microsoft.EntityFrameworkCore
    Install-package Microsoft.EntityFrameworkCore.SqlServer
    Install-package Microsoft.EntityFrameworkCore.Design
    Micorsoft.EntityFrameworkCore:EF框架的核心包
    Micorsoft.EntityFrameworkCore.SqlServer:针对SqlServer数据库的扩展,使用SqlServer数据库必须。类似的还有MySql,SqlLite等
    Micorsoft.EntityFrameworkCore.ToolsMicorosft.EntityFrameworkCore.Design:用户根据现有的数据库生成模型代码等

    2、添加实体类

    public class UserEntity
        {
            /// <summary>
            /// 自增Id
            /// </summary>
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            [Key]
            public int EId { get; set; }
            public DateTime CreationTime { get; set; } = DateTime.Now;
            public DateTime UpdatTime { get; set; } = DateTime.Now;
            public Guid Gid { get; set; }
            public bool Deleted { get; set; }
            public string Name { get; set; }
    
            public string Pwd { get; set; }
    
            public string Email { get; set; }
    
            public DateTime RegistTime { get; set; }
    
            public DateTime LastLoginTime { get; set; }
    
            public bool Status { get; set; }
        }

    3、增加数据库上下文实体类

     public class SQLDbContext : DbContext
        {
            public DbSet<UserEntity> userInfo;
            /// <summary>
            /// 注意要实现该构造
            /// </summary>
            /// <param name="dbContext"></param>
            public SQLDbContext(DbContextOptions<SQLDbContext> dbContext) : base(dbContext)
            {
            }
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                base.OnConfiguring(optionsBuilder);
                optionsBuilder.UseSqlServer("Server=.;Database=WebSolution;User Id=sa;Password=Dbuser2015;", opt =>
                {
                    opt.CommandTimeout(1000);
                });
            }
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Entity<UserEntity>(u =>
                {
                    //设置表映射
                    u.ToTable("Users");
                    //设置索引
                    u.HasIndex(u => new
                    {
                        u.Name,
                        u.Status
                    });
                });
            }
        }

    4、注入DbContext并添加链接字符串

     public void ConfigureServices(IServiceCollection services)
            {
                //注册数据库上下文
                services.AddDbContext<SQLDbContext>(options =>
                {
                    options.UseSqlServer(Configuration.GetConnectionString("Main_ReadAndWrite"));
                }, ServiceLifetime.Scoped);
            }
    "ConnectionStrings": {
        "Main_ReadAndWrite": "Server=.;Database=WebSolution;User Id=sa;Password=Dbuser2015;"
      }

    5、初始化数据库及更新

    5.1首先需要安装efcore 命令行工具

    dotnet tool install --global dotnet-ef

    如果需要更新命令行工具执行如下命令

     dotnet tool update --global dotnet-ef
    5.2生成、更新、删除数据库结构
        1.生成
            dotnet ef migrations add Initial --context Data.Model.SQLDbContext
        2.更新到数据库
             dotnet ef database update
        3.删除
            dotnet ef migrations remove

    生成或更新后,ef会自动创建Migrations目录用于记录变动版本。

     

    6、数据结构发布

    根据Migration的版本文件,可以自动创建数据库结构升级sql语句。

    dotnet ef migrations script 20201026033234_Initial -o init.sql  
          (注:可以指定项目和DbContext来应对多个context的情况)--startup-project ../D4L.Application --context D4L.Data.D4LDbContext

    还可以根据代码版本文件生成版本间的差异SQL

    dotnet ef migrations script 20201026033234_Initial -o init.sql   20201026061627_Initial  20201026062005_UpUserAddDept

    这样就可以生成从20201026061627_Initial到20201026062005_UpUserAddDept之间的数据库结构升级sql。

    
    
  • 相关阅读:
    求某个数的位数公式
    ArrayList和lInkedList比较
    队列
    抽象数据结构-栈
    LinkedList的实现
    ArrayList的实现
    Iterator和List的一些问题
    SCHEMA约束
    DTD约束
    XML解析
  • 原文地址:https://www.cnblogs.com/chenxizhaolu/p/13877685.html
Copyright © 2011-2022 走看看