zoukankan      html  css  js  c++  java
  • 自己编写 EntityTypeConfiguration

    1.新建类库 EFCore.EntityTypeConfig ,安装nuget  PM> Install-Package Microsoft.EntityFrameworkCore

    2.新建接口IEntityTypeConfiguration

    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Metadata.Builders;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace EFCore.EntityTypeConfig
    {
      public  interface IEntityTypeConfiguration
        {
            void Map(ModelBuilder bulder);
        }
        public interface IEntityTypeConfiguration<T>:IEntityTypeConfiguration where T:class
        {
            void Map(EntityTypeBuilder<T> builder);
        }
    }
    IEntityTypeConfiguration

    新建类EntityTypeConfiguration.cs

    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Metadata.Builders;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace EFCore.EntityTypeConfig
    {
       public abstract class EntityTypeConfiguration<T>:IEntityTypeConfiguration<T> where T:class
        {
            public abstract void Map(EntityTypeBuilder<T> builder);
            public void Map(ModelBuilder builder)
            {
                Map(builder.Entity<T>());
            }
        }
    }
    EntityTypeConfiguration.cs

     新建类ModelBuilderExtenions.cs

    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    
    namespace EFCore.EntityTypeConfig
    {
        public static class ModelBuilderExtenions
        {
            private static IEnumerable<Type> GetMappingTypes(this Assembly assembly, Type mappingInterface) {
                return assembly.GetTypes().Where(x => !x.GetTypeInfo().IsAbstract
                && x.GetInterfaces().Any(y => y.GetTypeInfo().IsGenericType
                && y.GetGenericTypeDefinition() == mappingInterface)); }
    
            public static void AddEntityConfigurationsFromAssembly(this ModelBuilder modelBuilder, Assembly assembly)
            {
                var mappingTypes = assembly.GetMappingTypes(typeof(IEntityTypeConfiguration<>));
                   foreach (var config in mappingTypes.Select(Activator.CreateInstance).Cast<IEntityTypeConfiguration>()) { config.Map(modelBuilder); }
            }
        }
    }
    ModelBuilderExtenions.cs

    3.控制台引用类库EFCore.EntityTypeConfig 

    using EFCore.EntityTypeConfig;
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Reflection;
    using System.Text;
    
    namespace ConsoleApp3
    {
        public class MyDbContext:DbContext
        {
            public DbSet<Person> Persons { get; set; }
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                // modelBuilder.Entity<Person>().ToTable("T_Persons").Property(e => e.Id).IsRequired();
                // modelBuilder.Entity<Person>().ToTable("T_Persons") ;
    
                modelBuilder.AddEntityConfigurationsFromAssembly(Assembly.GetEntryAssembly());
            }
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                base.OnConfiguring(optionsBuilder);
                optionsBuilder.UseMySql("Server=127.0.0.1;database=test;uid=root;pwd=123321");
            }
        }
    }

  • 相关阅读:
    Android_NDK问题:APP_BUILD_SCRIPT points to an unknown file: <project_path>/jni/Android.mk
    Android开发问题集锦-Button初始为disable状态时自定义的selector不生效问题
    一步步学习Python-django开发-添加后台管理
    一步步学习Python-django开发-建立django数据库
    一步步学习Python-django开发-Mac下搭建Python-Django环境
    JAVA小知识点-Finally和Return的执行关系
    Android自定义组合控件内子控件无法显示问题
    《将博客搬至CSDN》
    idea自动生成try/catch代码块的快捷键
    转:Apache common包 CollectionUtils 使用详解
  • 原文地址:https://www.cnblogs.com/qq605490312/p/7799388.html
Copyright © 2011-2022 走看看