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 方法一块使用来配置表关系
本文暂时没有评论,来添加一个吧(●'◡'●)