首先回顾下EF中常规使用流程
1.新建实体类以及实体配置(data annotation或fluent api)
[Table("Users")]public classUsers
{
[Key]public Guid Id { get; set; }
[StringLength(10)]public string Name { get; set; }
}
2.新建数据库上下文类MyDbContext
1 public classMyDbContext : DbContext2 {3 publicMyDbContext() { }4
5 public DbSet Users { get; set; }6
7 protected override voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)8 {9 optionsBuilder.UseSqlServer("connectionString");10 }11
12 protected override voidOnModelCreating(ModelBuilder modelBuilder)13 {14 base.OnModelCreating(modelBuilder);15 }16 }
3.开始欢乐的操作Users
using (MyDbContext context = newMyDbContext())
{
context.Users.FirstOrDefaultAsync(r=> r.Name == "老王");
}
一切看起来都是很美好的,但假如有一天你面对上千个实体的时候,你可能会开始想用代码生成器.EF6中你还可以用modelBuilder.RegisterEntityType(type);那么现在又有一个新的要求,需要能同时使用data annotation和fluent api进行实体配置.自动根据约定注册实体,自动注册fluent api配置类.EF中注册实体的本质就是注册DbSet,方法非常多.
ok,直接贴代码,EF6:
///
///注册某个程序集中所有的非抽象实体子类///
/// 实体基类
///
/// 注册程序集
public static void R