EF Core对象关系映射多种方法
如果要看本篇文章请先查看《netcore mvc efcore 简单框架搭建+增删改查》文章,才能衔接这篇文章。
映射数据库这里我举例三种方法
一:方法一
就是文章netcore mvc efcore 简单框架搭建+增删改查上下文中使用的 DbSet<实体> 表名{ get; set; },因为微软约定大于配置,所以实体中每个属性映射到数据库中的类型会自动匹配到
public DbSet<User> User { get; set; }
上下文例子中插入这句可以映射数据库,这种是最简单最直观的,但是这种映射方法的使用只能让表中的字段是默认的类型和大小,这个问题在方法二中可以解决。
二:方法二
上下文中插入这个方法,可以设置属性大小也可以改表属性类型
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var user = modelBuilder.Entity<User>(); user.HasKey(e => e.Id); user.Property(e => e.Name).HasMaxLength(50); }
但是将所有的实体都放在上下文类中映射,如果表太多,看着会很乱。这个问题在方法三种可以解决。
三:方法三和方法二差不多,可以设置属性大小也可以改表属性类型,上下文中插入该方法,这个方法又有两种形式,一种是指定用户模型映射,另一种是指定程序集映射。
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfiguration(new UserEntityTypeConfiguration());//指定用户模型映射 //modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);//指定程序集映射 }
再创建一个类,这个类的作用其实和方法二中的作用一样,只不过把上下文中方法OnModelCreating() 映射的实体分别写在不同的类中,这样一个实体对应一个映射类,代码也不会显得那么乱了。
public class UserEntityTypeConfiguration : IEntityTypeConfiguration<User> { public void Configure(EntityTypeBuilder<User> builder) { builder.ToTable("user"); builder.HasKey(x => x.Id); builder.Property(x => x.Name).HasMaxLength(50).IsRequired(); builder.Property(x => x.Phone).HasMaxLength(250); builder.Property(x => x.Age); builder.Property(x => x.Like).HasMaxLength(100); } }
这三种方式可以混合使用
该文章到此结束!