Aprendizaje del marco EF Core

Dependencia -> Administrar el paquete NuGet (instalar de acuerdo con la selección de la base de datos)
①Conectarse a la base de datos
Inserte la descripción de la imagen aquí
②Completar la asignación de tablas y entidades
Inserte la descripción de la imagen aquí
Crear un proyecto de API principal .net
1. Asignar entidades de objeto a tablas de base de datos


  !!!两张方式修改表的字段

1.1 Crear una clase de entidad

[Table("Users")]						//第一种 修改表名称
public class Users
    {
    
    
        public int Id {
    
     get; set; }
        [Key]							//主键
        [Required]						//第一种 修改字段的非空属性 not null
        public string UserName {
    
     get; set; }
        [Column("age")]						//第一种 修改列名称
        [MaxLength(20)]						//第一种 修改列最大长度
        public int Age {
    
     get; set; }
        [Column(TypeName =("varchar(20)"))]			//第一种 修改列字段
        public string Password {
    
     get; set; }
        [NotMapped]						//第一种 忽略映射字段
        public string FullName {
    
     get; set; }
        //[DatabaseGenerated(DatabaseGeneratedOption.Identity)]   //第一种 添加记录时,自动生成值
        public DateTime CreateTime{
    
     get; set; }
        //[DatabaseGenerated(DatabaseGeneratedOption.None)]   //第一种 添加记录时,不允许为null 
        public DateTime CreateTime{
    
     get; set; }
    }

1.2 Crear clase DbContext

public class EFCoreContextDemo:DbContext
    {
    
    
    	//构造方法
        public EFCoreContextDemo() {
    
     }
        public EFCoreContextDemo(DbContextOptions<EFCoreContextDemo> options)
            : base(options)
        {
    
    
        }
        //两个实体类
        public DbSet<Users> Users {
    
     get; set; }
        public DbSet<Departments> Departments {
    
     get; set; }
        //重写OnConfiguring方法
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
    
    
            optionsBuilder.UseSqlServer("Data Source=127.0.0.1;database=EfCoreDemo;uid=sa;pwd=sa");
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
    
    
            //第二种 修改表名
            modelBuilder.Entity<Users>().ToTable("User");
            //第二种 修改字段的非空属性
            modelBuilder.Entity<Users>().Property(b => b.UserName).IsRequired();
            //第二种 忽略字段映射
            modelBuilder.Entity<Users>().Ignore(b=>b.FullName);
            //第二种 设置字段的长度  最大长度
            modelBuilder.Entity<Users>().Property(b => b.Password).HasColumnType("varchar(30)").HasMaxLength(10);
            
            //第二种 声明字段 新建记录时,自动添加值
            //modelBuilder.Entity<Users>().Property(b => b.CreateTime).ValueGeneratedOnAdd();
            modelBuilder.Entity<Users>().Property(b => b.CreateTime).HasDefaultValueSql("getdate()");
            //更新FullName,SortName时,UserName自动变化
            modelBuilder.Entity<Users>().Property(b => b.UserName).HasComputedColumnSql("[FullName]" + '.' + "[SortName]");
            //添加值是 不允许为Null
            modelBuilder.Entity<Users>().Property(b => b.Age).ValueGeneratedNever();
        }
    }

El segundo método tiene una prioridad más alta que el primero


1.2 Herramientas -> Administrador de paquetes NuGet -> Consola de administración de paquetes
Ejecute el comando Agregar-Migración

Name: init1-->(输入日志名)
Build started...
Build succeeded.//日志迁移到数据库里
To undo this action, use Remove-Migration.

Ejecute el comando Update-Database

Build started...
Build succeeded.//创建表成功
Applying migration '20210112134053_init1'.
Done.

2. La tabla de la base de datos se asigna a la entidad del objeto.

2.1 Primero vaya a la base de datos para crear una tabla
2.2 Ejecute el comando para generar automáticamente la clase de entidad
Scaffold-DbContext "Data Source = 127.0.0.1; database = database name; uid = sa; pwd = sa" Microsoft.EntityFrameworkCore.SqlServer - Entidades OutputDir

说明"数据库连接串  功能组件  文件输出到那个目录下"
注意:执行时看清 控制台的默认项目;设置项目为启动项
Scaffold-DbContext "Data Source=127.0.0.1;database=CompanyManger;uid=sa;pwd=sa" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities
-OutputDir 	//指定用于输出的目录,如果省略则使用顶级项目目录。
-Context 	//指定生成的DbContext类的名称。
-Tables 	//指定要为其生成类的表。
-Force 		//强制脚手架覆盖现有文件,否则只在没有输出的文件被覆盖的情况下,代码才会继续。更新表
//第一次生成实体类
 Scaffold-DbContext "Data Source=127.0.0.1;database=CompanyManger;uid=sa;pwd=sa" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
//第二次生成实体类
 Scaffold-DbContext "Data Source=127.0.0.1;database=CompanyManger;uid=sa;pwd=sa" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force

2.3 Generar automáticamente la clase Dbcontext (método CRUD)
Carpeta del controlador, haga clic con el botón derecho para agregar la
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
clase de inicio del controlador

public void ConfigureServices(IServiceCollection services)
  {
    
    
      //添加上下文类
      services.AddScoped<EFCoreContextDemo>();
      services.AddControllers();
  }

Iniciar datos de acceso al proyecto

Si la tabla de la base de datos no tiene una clave principal, el campo identificado por [Clave] en la clase de entidad es la clave principal.

//实体类的字段 标识为主键 
[Key]
public string UserName {
    
     get; set; }
//检索方法则通过id查找无效,通过标识Key的字段查找
public async Task<ActionResult<Users>> GetUsers(int id)
  {
    
    
      //var users = await _context.Users.FindAsync(id);
      var users = await _context.Users.FindAsync("Taro");//实体主键为UserName
      if (users == null)
      {
    
    
          return NotFound();
      }
      return users;
  }

Atributos de sombra

影子属性是未在 .NET 实体类中定义的,但在 EF Core 模型中为该实体类型定义的属性。 
这些属性的值和状态纯粹在更改跟踪器中进行维护。 当数据库中的数据不应在映射的实体类型上公开时,阴影属性非常有用。
//外键阴影属性
//1. 影子属性最常用于外键属性,其中两个实体之间的关系由数据库中的外键值表示
//2. 使用实体之间的导航属性在实体类型上管理关系
//3. 当发现关系但在依赖实体类中找不到外键属性时,EF 会引入一个影子属性
下面的代码列表将导致向 Users 实体引入 DepartmentId 影子属性,数据库中会自动引入DepartmentId字段
public class Departments
  {
    
    
      public int Id {
    
     get; set; }
      public string DepartmentName {
    
     get; set; }
      public string Address {
    
     get; set; }
      public string Remark {
    
     get; set; }
  }
public class Users
  {
    
    
      public int Id {
    
     get; set; }       
      //[Required]
      public string UserName {
    
     get; set; }
      //[Column("age")]
      //[DatabaseGenerated(DatabaseGeneratedOption.None)]
      public int Age {
    
     get; set; }
      //[Column(TypeName =("varchar(20)"))]
      public string Password {
    
     get; set; }
      //[NotMapped]
      public string FullName {
    
     get; set; }
      public string SortName {
    
     get; set; }
      //[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
      public DateTime CreateTime {
    
     get; set; }
      //影子属性  生成表时是dapartmentId
      public Departments departments {
    
     get; set; }
  }

指定 外 键
Users.DepartmentFkey -> Departments .DepartmentId

public class Users
  {
    
    
      public int Id {
    
     get; set; }       
      //[Required]
      public string UserName {
    
     get; set; }
      //[Column("age")]
      //[DatabaseGenerated(DatabaseGeneratedOption.None)]
      public int Age {
    
     get; set; }
      //[Column(TypeName =("varchar(20)"))]
      public string Password {
    
     get; set; }
      //[NotMapped]
      public string FullName {
    
     get; set; }
      public string SortName {
    
     get; set; }
      //[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
      public DateTime CreateTime {
    
     get; set; }
      //指定外键
      public int DepartmentFkey {
    
     get; set; }
      [ForeignKey("DepartmentFkey")]
      public Departments departments {
    
     get; set; }
   }

Cadena de conexión de base de datos

//startUp
public void ConfigureServices(IServiceCollection services)
 {
    
    
     services.AddDbContext<EFCoreContextDemo>(option => option.UseSqlServer(Configuration.GetConnectionString("constr")));
     services.AddControllers();
 }
 //appsettings.json
 "ConnectionStrings": {
    
    
    "constr": "Data Source=127.0.0.1;database=EfCoreDemo2;uid=sa;pwd=sa"
  },

Supongo que te gusta

Origin blog.csdn.net/asdasd1fdsyrt/article/details/112501693
Recomendado
Clasificación