1 EF Core Fluent API例子
假如我们有一个Country的实体类
public class Country
{
public int PId { get; set; }
public string Name { get; set; }
public DateTime AddedOn { get; set; }
}
public class CountryContext : DbContext
{
public CompanyContext(DbContextOptions<CompanyContext> options) : base(options)
{
}
public DbSet<Country> Country { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//Write Fluent API configurations here
//Entity Configuration
modelBuilder.Entity<Country>().HasKey(s => s.PId);
//Property Configurations
modelBuilder.Entity<Country>(entity =>
{
entity.Property(e => e.Name)
.HasColumnName("CountryName")
.HasDefaultValue("USA")
.IsRequired();
entity.Property(e => e.AddedOn)
.HasColumnType("date")
.HasDefaultValueSql("(getdate())");
});
modelBuilder.Entity<Country>().Ignore(e => e.population);
}
}
Line 11: 使用HasKey()函数设置PId属性作为主键
Line 15-18:配置Name属性在数据库表中对应的列是CountryName,并且该列使用了一个USA默认值,IsRequired() 方法确保该列不为空
Line 21, 22 :AddedOn 属性默认设置为日期类型,并且使用了getdate()函数获取默认值
Line 24 : 使用Ignore() 方法指定Population属性不会在数据库表中创建列
注意:你可以在OnModelCreating 方法内将另外一些实体的配置,使用EF Core Migrations命令生成对应的表
2 Fluent API 方法
下面表中我们列举出了EF Core大多数常用的 Fluent API
类型 |
Fluent API方法 |
用途 |
模型配置 |
HasDbFunction() |
配置数据库序列 |
模型配置 |
HasSequence() |
配置数据库序列 |
模型配置 |
HasDefaultSchema() |
指定数据库schema |
实体配置 |
HasIndex() |
配置属性作为索引 |
实体配置 |
ToTable() |
配置实体对应的数据库中表的名称 |
实体配置 | HasKey() | 设置属性作为表主键 |
实体配置 | HasNoKey() | 表明实体没有主键,此类实体从不会跟踪,此实体也不会在数据库中做增删改查 |
实体配置 |
HasOne() |
是一对一或者一对多关系的一部分 |
实体配置 | HasMany() | 配置一对多关系 |
实体配置 |
WithOne() |
是一对一或者一对多关系的一部分 |
实体配置 | WithMany() | 用来配置一对多关系 |
实体配置 |
HasForeignKey() |
配置属性作为外键 |
实体配置 | Ignore() | 指定属性将不会映射到数据库表中 |
实体配置 |
HasConstraintName() |
指定外键约束名称 |
属性配置 | HasColumnName() | 指定属性对应数据库列名称 |
属性配置 | HasColumnType() | 指定属性对应数据库列类型 |
属性配置 | HasDefaultValue() | 针对属性在数据库中指定一个默认值 |
属性配置 | HasDefaultValueSql() | 针对属性在数据库中指定一个默认数据库列的表达式,例如 getdate() |
属性配置 | HasMaxLength() | 指定属性对应数据库列最大长度 |
属性配置 | IsUnicode() | 指定列包含Unicode字符 |
属性配置 | ValueGeneratedOnAdd() | 保存一个新的实体配置为该属性生成一个默认值 |
3 Has/With 模式配置关联
使用Fluent API配置表关系时,我们经常会使用Has/With,Has & With 方法一块使用来配置表关系