61 lines
1.9 KiB
C#
61 lines
1.9 KiB
C#
|
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();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|