Встроенные модели не работают после обновления до. net core 3.1 - PullRequest
0 голосов
/ 22 апреля 2020

Для перехода с 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));
            }
        }
    }
}
...