DocSpace-client/common/Tools/AutoMigrationCreator/Core/ContextFinder.cs

61 lines
1.9 KiB
C#
Raw Normal View History

2021-10-12 14:48:33 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using ASC.Core.Common.EF;
namespace AutoMigrationCreator
{
public class ContextFinder
{
public Settings Settings { get; }
private readonly Type _baseType = typeof(BaseDbContext);
private readonly string _assemblyName = "ASC.Core.Common";
public ContextFinder(Settings settings)
{
Settings = settings;
}
public IEnumerable<Type> GetContextsTypes()
{
var coreContextAssembly = Assembly.Load(_assemblyName);
var assemblyTypes = coreContextAssembly.GetTypes();
var independetProviderTypes = GetProviderIndependentContextTypes(assemblyTypes);
var dependetProviderTypes = GetProviderDependetContextTypes(assemblyTypes, independetProviderTypes);
foreach (var contextType in dependetProviderTypes)
{
yield return contextType;
}
}
private IEnumerable<Type> GetProviderIndependentContextTypes(IEnumerable<Type> assemblyTypes)
{
return assemblyTypes.Where(b => b.BaseType == _baseType);
}
private IEnumerable<Type> GetProviderDependetContextTypes(IEnumerable<Type> assemblyTypes,
IEnumerable<Type> indepentedTypes)
{
foreach (var assemblyType in assemblyTypes)
{
foreach (var independtType in indepentedTypes)
{
if (assemblyType.BaseType == independtType) yield return assemblyType;
}
}
}
private string GetProviderName()
{
using var templateContext = new CoreDbContext();
templateContext.ConnectionStringSettings = Settings.ConnectionStringSettings;
return templateContext.GetProviderByConnectionString().ToString().ToLower();
}
}
}