第六节:OA权限管理系统(EF对象关系配置)

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

namespace OYW.OA.EFRepositories.MapConfiguration
{
    public interface IEntityMappingConfiguration
    {
        void Map(ModelBuilder b);
    }

    public interface IEntityMappingConfiguration<T> : IEntityMappingConfiguration where T : class
    {
        void Map(EntityTypeBuilder<T> builder);
    }

    public abstract class EntityMappingConfiguration<T> : IEntityMappingConfiguration<T> where T : class
    {
        public abstract void Map(EntityTypeBuilder<T> b);

        public void Map(ModelBuilder b)
        {
            Map(b.Entity<T>());
        }
    }
}
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace OYW.OA.EFRepositories.MapConfiguration
{
    public static class ModelBuilderExtenions
    {
        private static IEnumerable<Type> GetMappingTypes(this Assembly assembly, Type mappingInterface)
        {
            return assembly.GetTypes().Where(x => !x.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(IEntityMappingConfiguration<>));
            foreach (var config in mappingTypes.Select(Activator.CreateInstance).Cast<IEntityMappingConfiguration>())
            {
                config.Map(modelBuilder);
            }
        }
    }
}
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using OYW.OA.Domain;
using OYW.OA.Domain.People;
using OYW.OA.EFRepositories.MapConfiguration;
using System;
using System.Collections.Generic;
using System.Text;

namespace OYW.OA.EFRepositories.People
{
    public class ORG_UserMap : EntityMappingConfiguration<ORG_User>
    {
        public override void Map(EntityTypeBuilder<ORG_User> b)
        {
            b.HasKey(p => p.ID);
        }
    }
}
using OYW.OA.Domain.People;
using OYW.OA.EFRepositories.MapConfiguration;
using System;
using System.Collections.Generic;
using System.Text;

namespace OYW.OA.EFRepositories.People
{
    public class ORG_UserLogonMap : EntityMappingConfiguration<ORG_UserLogon>
    {
        public override void Map(Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder<ORG_UserLogon> b)
        {
            b.HasKey(p => p.ID);
            b.HasOne(p => p.User).WithMany(p => p.UserLogonList).HasForeignKey(p => p.UserID);
        }
    }
}
using Microsoft.EntityFrameworkCore;
using OYW.OA.Domain.People;
using OYW.OA.Domain.Settings;
using OYW.OA.EFRepositories.MapConfiguration;
using System;
using System.Collections.Generic;
using System.Text;

namespace OYW.OA.EFRepositories
{
    public partial class OAEntity : DbContext
    {
        public OAEntity(DbContextOptions<OAEntity> options) : base(options)
        {
        }
        public virtual DbSet<ORG_User> ORG_User { get; set; }
        public virtual DbSet<SYS_Menu> SYS_Menu { get; set; }

        public virtual DbSet<ORG_UserLogon> ORG_UserLogon { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.AddEntityConfigurationsFromAssembly(GetType().Assembly);
        }
    }
}
modelBuilder.AddEntityConfigurationsFromAssembly(GetType().Assembly);
        }
    }
}
发布了128 篇原创文章 · 获赞 18 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/xiaoxionglove/article/details/80871782