【EF Core】基础
简介
Entity Framework Core(EF Core)是微软官方的ORM框架。优点:功能强大、官方支持、生产效率高、力求屏蔽底层数据库差异;缺点:复杂、上手门槛高、不熟悉EFCore的话可能会进坑。
Code First开发流程
- 安装对应数据库的Nuget包,如下:
Install-Package Microsoft.EntityFrameworkCore.SqlServer
- 创建实体类
public class Book
{
public long Id { get; set; }//主键
public string Title { get; set; }//标题
public DateTime PubTime { get; set; }//发布日期
public double Price { get; set; }//单价
public string AuthorName { get; set; }//作者名字
public string Decription { get; set; }
//public string Content { get; set; }
}
- 创建实体配置类
配置类需要实现接口IEntityTypeConfiguration,它是用来配置实体类和表的对应关系
public class BookEntityConfig : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.ToTable("T_Books");
builder.Property(e => e.Title).HasMaxLength(50).IsRequired();
builder.Property(e => e.AuthorName).HasColumnType("varchar(100)").IsRequired();
}
}
- 创建DbContext
public class TestDbContext : DbContext
{
public DbSet Books { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string connStr = "Data Source=.;Initial Catalog=EFCoreDB;User ID=sa;Password=123456";
optionsBuilder.UseSqlServer(connStr);
optionsBuilder.LogTo(Console.WriteLine);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}
}
约定映射规则
1:表名采用DbContext中的对应的DbSet的属性名。
2:数据表列的名字采用实体类属性的名字,列的数据类型采用和实体类属性类型最兼容的类型。
3:数据表列的可空性取决于对应实体类属性的可空性。
4:名字为Id的属性为主键,如果主键为short, int 或者 long类型,则默认采用自增字段,如果主键为Guid类型,则默认采用默认的Guid生成机制生成主键值。
两种配置方式
Data Annotation
把配置以特性(Annotation)的形式标注在实体类中。
[Table("T_Books")]
public class Book
{
}
优点:简单;缺点:耦合。
Fluent API
把配置写到单独的配置类中。
builder.ToTable("T_Books");
缺点:复杂;优点:解耦
大部分功能重叠。可以混用,但是不建议混用。
EF系列:
https://blog.csdn.net/xingkongtianyuzhao/category_9704639.html
ef复杂查询: