39 lines
1.3 KiB
C#
39 lines
1.3 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace HopFrame.Core.Config;
|
|
|
|
public class DbContextConfig {
|
|
public Type ContextType { get; }
|
|
public List<TableConfig> Tables { get; } = new();
|
|
|
|
public DbContextConfig(Type context) {
|
|
ContextType = context;
|
|
|
|
foreach (var property in ContextType.GetProperties()) {
|
|
if (!property.PropertyType.IsGenericType) continue;
|
|
var innerType = property.PropertyType.GenericTypeArguments.First();
|
|
var setType = typeof(DbSet<>).MakeGenericType(innerType);
|
|
if (property.PropertyType != setType) continue;
|
|
|
|
var table = new TableConfig(this, innerType, property.Name, Tables.Count);
|
|
Tables.Add(table);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DbContextConfig<TDbContext>(DbContextConfig config) {
|
|
public DbContextConfig InnerConfig { get; } = config;
|
|
|
|
public DbContextConfig<TDbContext> Table<TModel>(Action<TableConfig<TModel>> configurator) where TModel : class {
|
|
var table = Table<TModel>();
|
|
configurator.Invoke(table);
|
|
return this;
|
|
}
|
|
|
|
public TableConfig<TModel> Table<TModel>() where TModel : class {
|
|
var table = InnerConfig.Tables.Single(table => table.TableType == typeof(TModel));
|
|
return new TableConfig<TModel>(table);
|
|
}
|
|
|
|
}
|