EFCore 2.0的IEntityTypeConfiguration<TEntity>的使用!

通过新建一个类来实现  IEntityTypeConfiguration 这个接口,将EFCore中的实体配置写在单独的配置类中,便于修改和维护。

  OnModelCreating代码:

    

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<Class>().ToTable("T_Classs");

            modelBuilder.Entity<Teachers>().ToTable("T_Teachers");

            //modelBuilder.Entity<Students>()    //这是EF 2.0之前版本将配置写在OnModelCreating方法中的写法
            //    .ToTable("T_Students")
            //    .HasOne(s => s.Class)
            //    .WithMany(e => e.Students)
            //    .HasForeignKey(e => e.ClassId);

            modelBuilder.ApplyConfiguration(new StudentCofig());  //这是将单独的配置类注册到OnModelCreating中

            modelBuilder.ApplyConfiguration(new TeacherClassConfig());
               

        }

  新建的实体配置类:

  

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using MyEF2.Models;
using System;
using System.Collections.Generic;
using System.Text;

namespace MyEF2.Configuration
{
    public class StudentCofig : IEntityTypeConfiguration<Students>  //继承该接口
    {
        public void Configure(EntityTypeBuilder<Students> builder)
        {
            builder.ToTable("T_Students")
                .HasOne(s => s.Class)
                .WithMany(e => e.Students)
                .HasForeignKey(e => e.ClassId);
        }
    }
}

  最后在MyDbContext中的OnModelCreating方法中注册:

    

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<Class>().ToTable("T_Classs");

            modelBuilder.Entity<Teachers>().ToTable("T_Teachers");

            modelBuilder.ApplyConfiguration(new StudentCofig());  //这是将单独的配置类注册到OnModelCreating中

            modelBuilder.ApplyConfiguration(new TeacherClassConfig());
               

        }

    

原文地址:https://www.cnblogs.com/ROOKIEDEBUG/p/9289263.html