添加依賴
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools(Migration工具)
根據使用的DB添加對應依賴:
SQL Server:Microsoft.EntityFrameworkCore.SqlServer
添加該依賴時可不添加Microsoft.EntityFrameworkCore,該依賴會捆綁添加
MySQL:?Pomelo.EntityFrameworkCore.MySQL
該依賴為民間項目。Oracle官方也提供MySQL依賴,但是跟新速度極慢
......
創建實體類
internal class Book
{public long Id { get; set; }public string Title { get; set; }public string AuthorName { get; set; }public DateTime PubTime { get; set; }public double Price { get; set; }
}
創建配置類
1.?實體類配置類(可選)
internal class BookConfig : IEntityTypeConfiguration<Book>
{public void Configure(EntityTypeBuilder<Book> builder){builder.ToTable("Books"); // 表名builder.Property(e => e.Title) // 對屬性進行設置//.HasColumnName("Book_Title") // 字段名(默認為屬性名)//.HasColumnType("varchar(50)") // 字段類型//.HasDefaultValue("DefaultTitle") // 字段默認值.IsRequired(true) // 字段是否可為null.HasMaxLength(50); // 字段最大長度//builder.Ignore(e => e.PubTime); // 忽略字段(不進行實體類->表的映射)//builder.HasKey(e => e.Id); // 設置主鍵//builder.HasIndex(e => e.Title); // 設置索引//builder.HasIndex(e => new { e.Title, e.AuthorName }); // 設置復合索引 | IsUnique()設置唯一索引 | IsClustered()設置聚集索引}
}
配置類實現IEntityTypeConfiguration<>接口,可在其中對表進行詳細設置,常用可設置項詳見代碼注釋(若不創建實體類配置類,則會采用默認配置,詳見本節文末)
2.?DB配置類
internal class ThisDbContext : DbContext
{public DbSet<Book> Books { get; set; } // 實體protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){string connStr = "server=localhost;port=3306;database=x;user=root;password=xyz";//optionsBuilder.UseSqlServer(connStr); // SQLServer連接設置optionsBuilder.UseMySql(connStr, new MySqlServerVersion(new Version(8, 0, 33))); // MySQL連接設置}protected override void OnModelCreating(ModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly); // 實體類配置類(實現IEntityTypeConfiguration<>接口的類)所屬Assembly}
}
默認配置:
1.默認將實體類屬性名作為表字段名
2.默認將DbSet<>屬性名作為表名
3.默認將"Id"或"實體類名+Id"屬性對應的表字段設置為主鍵
初始化DB
在"程序包管理器控制臺"中執行:
add-migration?xxx(此次migration的代號)
update-database
關于常用命令,可參考?EFCore_Migration常用命令-CSDN博客
試運行
DB:
Program.cs
internal class Program
{static void Main(string[] args){using ThisDbContext dbContext = new();IQueryable<Book> books = dbContext.Books.Where(e => e.Price > 0);foreach (var item in books){Console.WriteLine(item.Title);}}
}
運行結果