EFCore-FluentAPI
EF Core-FluentAPI
在约定大于配置这一规则下,EF Core提供了一些约定配置
- 表明采用DbContext中对应的DbSet的属性名
- 数据表列的名字采用实体类的属性名字,列的数据类型采用实体类属性中最兼容的类型
- 数据表列的可空性取决于对应实体类属性的可空性(通过属性类型的?来调整是否为可空)
- 名字为Id的属性为主键,如果主键为short,int或者long类型,则默认采用自增字段
- 如果主键为Guid类型,则默认采用默认的Guid生成机制生成主键值
FluentAPI
这种方式就是创建一个配置类以实现IEntityTypeConfiguration接口后对实体类(表)进行配置
这种方法配置起来更麻烦,但能解耦合
方法名 | 说明 |
---|---|
Ignore() | 忽略表中某一属性 |
HasColumnName() | 配置列名*(需要先获取属性) |
HasColumnType() | 配置列的类型 |
HasKey() | 配置主键*(需要先获取属性) |
FluentAPI并不只是可以使用在配置类中,也可以在DbContext的OnModelCreating方法中直接使用
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Book>(b =>
{
// 忽略Book实体类中的Title属性
b.Ignore(b => b.Title);
});
// 使用这种方法对书实体类中的属性和表中列名做映射(ResultMapping)
modelBuilder.Entity<Book>(b =>
{
b.Property(b => b.Title).HasColumnName("b_title");
});
// 使用这种方法对表中列的类型进行指定
modelBuilder.Entity<Book>(b =>
{
b.Property(b => b.Title).HasColumnType("varchar(8)");
});
// 配置主键
modelBuilder.Entity<Book>().HasKey(b => b.Id);
}
Data Annotation
使用特性(Java中的注解)这一方式来配置实体类和表
不推荐使用这种方式,因为耦合度高
Table
[Table("Books")]
public class Book
{
public long Id { get; set; }
public string Title { get; set; }
public DateTime PubTime { get; set; }
public double Price { get; set; }
}
Required&&MaxLength
[Required]
[MaxLength(50)]
public string Title { get; set; }