5、使用DB first创建数据库并使用Migration进行迁移
1、项目WebApp_DEMO添加数据上下文
在Repository文件夹中添加DemoDbContext类,继承DbContext,添加引用:using Microsoft.EntityFrameworkCore;
将实体类Login添加到Dbset,添加引用:using WebApp_DEMO.Models;
using Microsoft.EntityFrameworkCore; using WebApp_DEMO.Models; namespace WebApp_DEMO.Repository { public class DemoDbContext: DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"server=127.0.0.1;database=WebApp_DEMO;uid=sa;pwd=1234"); } ///数据上下文/// 实体类添加到DbSet /// public DbSet Logins { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity ().ToTable("Login"); } } }
2、注入服务
在Program.cs中注入DemoDbContext,添加引用:
builder.Services.AddDbContext();
3、创建数据库配置Migration
在程序包管理器控制台中
PM> add-migration init
初始化成功后,控制台返回“Build succeeded”信息。同时,项目中生成一个Migrations文件夹,里面是迁移记录。
其中:xxx_init.cs是主迁移文件,包含应用迁移所需的操作 Up() 和还原迁移所需的操作Down()
xxx_init.Designe.cs迁移元数据文件。 包含 EF 所用的信息,如给实体类型构建属性、主键、外键、索引、映射到数据表,主体和依赖关系等等。
PM> update-database
数据库创建成功后,控制台返回“Done.”信息
查看数据库,已经生成数据库和数据表
常见错误及解决:
错误:ScriptHalted。解决:PowerShell版本低,在官网下载对应版本,网址:https://www.microsoft.com/en-us/download/details.aspx?id=54616
错误:Your startup project 'WebApp_DEMO' doesn't reference Microsoft.EntityFrameworkCore.Design.解决:缺少NuGet包,在在该项目中安装:Install-Package Microsoft.EntityFrameworkCore.Tools
错误:对象'PK_xxx' 依赖于 列'xxx'。由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN xxx 失败。解决:sqlserve中直接删除箭的约束,或使用语句alter table TableName drop constraint PK_xxx
4、Code First 数据注释
使用 DataAnnotations,可以将 Code First 类映射到预先存在的数据库
[Key]
[Required]
[StringLength(50)]
[Display(Name = "First Name")]
[Column("FirstName")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
参考:https://blog.csdn.net/qq_39569480/article/details/114319127
项目地址:https://files.cnblogs.com/files/shiliumu/App_P5.rar?t=1649840339