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 ConfigurationmodelBuilder.Entity<Country>().HasKey(s => s.PId);//Property ConfigurationsmodelBuilder.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 方法一块使用来配置表关系