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