Для перехода с asp. net core 2.1 на asp. net core 3.1 Я изменил код для загрузки внешних моделей следующим образом:
Services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
{
options.FileProviders.Add(new EmbeddedFileProvider(typeof(BaseController).Assembly));
});
Мои модели Контроллеры и представления находятся в библиотеке, которая является частью другого проекта, который я добавляю в свой основной проект в виде пакета nuget, а затем добавляю сборку при запуске следующим образом:
_assembly = typeof (Motor.UI. Ввод в эксплуатацию) .GetTypeInfo () Ассамблеи. ModuleConfiguration.Add (new ModuleInfo {Name = _assembly.FullName, Assembly = _assembly, Path = _assembly.Location});
Он распознает мои контроллеры и представления, но не мои модели. Я получаю следующую ошибку:
Невозможно создать DbSet для 'ModelName', поскольку этот тип не включен в модель для контекста. '
Мое приложение dbcontext выглядит так:
publi c класс ApplicationDbContext: IdentityDbContext, IDbContext {
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder ModelBuilder)
{
base.OnModelCreating(ModelBuilder);
ModelBuilder.HasDefaultSchema("Core");
foreach (var module in ModuleConfiguration.Modules.Where(a => a.Assembly.GetName().Name.StartsWith("Motor") && a.Assembly.GetName().Name.Contains("Domain")))
{
RegisterCustomMappings(ModelBuilder, module);
}
}
private static void RegisterCustomMappings(ModelBuilder ModelBuilder, ModuleInfo ModuleInfo)
{
var customModelBuilderTypes = ModuleInfo.Assembly.DefinedTypes.Select(t => t.AsType()).Where(x => typeof(ICustomModelBuilder).IsAssignableFrom(x));
foreach (var builderType in customModelBuilderTypes)
{
if (builderType != null && builderType != typeof(ICustomModelBuilder))
{
var modelBuilder = (ICustomModelBuilder)Activator.CreateInstance(builderType);
modelBuilder.Build(ModelBuilder);
}
}
var baseAssembly = ModuleInfo.Assembly;
foreach (var entity in baseAssembly.GetTypes())
{
if (typeof(IBaseEntity).IsAssignableFrom(entity)
&& entity.GetTypeInfo().IsClass && !entity.GetTypeInfo().IsAbstract
&& !entity.GetCustomAttributes(typeof(NotMappedAttribute), false).Any()
&& entity.Namespace != "Motor.Base.Domain.Models")
{
ModelBuilder.Entity(entity).HasAlternateKey(nameof(IBaseEntity.UID));
}
}
foreach (var entity in baseAssembly.GetTypes())
{
if (typeof(ISoftDeleteEntity).IsAssignableFrom(entity)
&& entity.GetTypeInfo().IsClass && !entity.GetTypeInfo().IsAbstract
&& !entity.GetCustomAttributes(typeof(NotMappedAttribute), false).Any()
&& entity.Namespace != "Motor.Base.Domain.Models")
{
ModelBuilder.Entity(entity).HasIndex(nameof(ISoftDeleteEntity.DeletedAt));
}
}
}
}