Scaffolding Entity Framework Контроллеры с Lamar - PullRequest
0 голосов
/ 11 января 2019

У меня настроен Lamar в моем проекте .NET Core 2:

    public class Program
    {
        public static void Main(string[] args)
        {
            IWebHost webhost = CreateWebHostBuilder(args).Build();
            //((Container)webhost.Services).GetInstance<IStart>().Run();
            webhost.Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseLamar()
                .UseStartup<Startup>();
    }

...

    public class Startup
    {
    ...
        public void ConfigureContainer(ServiceRegistry services)
        {
            services.Configure<Configuration.Auth>("auth", Configuration);
            ...
            services.Scan(s =>
            {
                s.TheCallingAssembly();
                s.WithDefaultConventions();
            });
            services.AddCors();
            services.AddMvc()
                .AddJsonOptions(o =>
                {
                    o.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                    o.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                })
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddDbContext<Context>(options => options.UseSqlServer(Configuration.GetConnectionString("defaultConnection")));
        }
    }

Однако при попытке использовать Scaffold API Controller с действиями, используя Entity Framework , я сталкиваюсь со следующей ошибкой:

Произошла ошибка при запуске выбранного генератора кода: «Для этого объекта не определен конструктор без параметров».

Поиск этого https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/?view=aspnetcore-2.2#update-main-method-in-programcs показал, что это может проявиться в проектах ASP.NET Core 2, которые все еще пытаются использовать структуру .NET 1.x.

Я нашел хакерский обходной путь, который я опубликую ниже, который предполагает, что генерация кода скаффолдинга может иметь проблемы с Ламаром. Однако есть ли лучшее решение? Можете ли вы настроить Lamar для обработки генерации кода Entity Framework?

1 Ответ

0 голосов
/ 11 января 2019

Учитывая, что EF не сработал в секции генерирования кода, я подумал, что, возможно, проблема не в конструкторе без параметров (я уверен, что любой безымянный объект, на который он ссылается, действительно имеет его), а в том, как WebHost получает построено при использовании Lamar.

Примечание в документации Lamar об интеграции с основными состояниями ASP.NET

Внимание! Соглашение Startup.ConfigureServices(ServiceRegistry) не работает с ASP.Net Core 2.1. Вместо этого используйте ConfigureContainer(ServiceRegistry).

Я использовал эту функцию Lamar в моем стартапе; однако, если я изменил его обратно на ConfigureContainer(IServiceCollection services) (и закомментировал функции, специфичные для Ламара, такие как Сканирование), я обнаружил, что смог снова установить EF-контроллер.

Итак, в данный момент мой обходной путь - закомментировать Ламара перед созданием лесов, а затем раскомментировать его, как только я закончу. Я подозреваю, что может быть лучшее решение, хотя ...

...