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);
        }
    }

这三种方式可以混合使用

该文章到此结束!

 

posted @ 2023-04-22 02:47  二二姐  阅读(287)  评论(0编辑  收藏  举报