实体属性
模型中每个实体类型都有一组属性,根据这些属性EF Core将从数据库中读取和写入数据。如果连接的是关系型数据库,实体属性将映射到表中的列(table中的column)
1、包含和排除的属性
约定:具有getter和setter的所有public的属性都将包括在模型中。
排除特定属性的2中方式:
1、数据批注:
[Table("blog",Schema ="ER")] public class BlogModel { public int BlogId { get; set; } public string Url { get; set; } [NotMapped] public DateTime LoadTime { get; set; } public List<PostModel> Posts { get; set; } }
2、Fluent API:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("ER").Entity<AuditEntity>(); modelBuilder.Entity<BlogModel>() .Ignore(b => b.LoadTime); }
2、列名
约定:使用关系数据库时,实体属性映射到与属性同名的表列。
如果需要映射到不同的列名,有3种方式。
1、Fluent API:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("ER").Entity<AuditEntity>(); modelBuilder.Entity<PostModel>() .Property(b => b.PostId).HasColumnName("post_id"); }
2、数据批注:
public class PostModel { [Column("post_id")] public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public BlogModel Blog{ get; set; } }
3、显示配置
Required 属性可以将可选的属性配置为‘必须’:
public class Blog { public int BlogId { get; set; } [Required] public string Url { get; set; } }
4、排序规则
这是EF Core新特性。
可以在string类型的列上定义排序规则,以确定如何对它们进行比较和排序。 例如,以下代码段将 SQL Server 列配置为不区分大小写:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("ER").Entity<AuditEntity>(); modelBuilder.Entity<PostModel>() .Property(b => b.Title).HasColumnName("title").UseCollation("SQL_Latin1_General_CP1_CI_AS"); }
如果数据库中的所有列都需要使用特定的排序规则,可以改为在数据库级别定义排序规则:
modelBuilder.UseCollation("SQL_Latin1_General_CP1_CS_AS");
警告:索引隐式继承列的排序规则。这意味着,对列的所有查询都将自动符合使用该列定义的索引的条件,前提是该查询不指定其他排序规则。
在查询中指定显式排序规则通常会阻止该查询使用该列上定义的索引,因为排序规则将不再匹配。
因此,建议在使用此功能时务必小心。 最好是在 (或数据库) 级别的列定义排序规则,以允许所有查询隐式使用该排序规则并受益于任何索引。
具体的,可参考排序规则