Обнаружили, что пытаетесь создать API из уже существующей базы данных sqlserver и вынуждены использовать C#/.NET?

Не идите дальше. Вы попали в нужное место.

Команда, которую вы ищете, называется «Scaffold-DbContext», я использовал ее для создания API из .NET Core 3.1 с использованием Entity Framework Core. Имея опыт работы с Python, мне приходилось переводить в голове множество концепций. Часть удовольствия быть разработчиком, говорить на множестве языков, но это никогда не заканчивается.

Вам тоже нужен этот API? Экономьте свое время с генератором API Swagger.IO. Умные люди вокруг меня помогают мне, поэтому я надеюсь, что смогу помочь вам!

Сначала настройте проект API с помощью Visual Studio:

Затем создайте базовый API-интерфейс Swagger.IO, извлеките его в сгенерированный код ASPNETCORE.

В то время, когда я работал над этой проблемой, она была доступна только в .NET Core 2. Однако я полагаю, что они поддерживают 3.0 в SwaggerHub, но в настоящее время она все еще находится в стадии бета-тестирования (проверка фактов SmartBear?)

После этого сбросьте цепляющуюся за жизнь базу данных через консоль диспетчера пакетов с помощью этой команды:

Scaffold-DbContext 'Server=<IP ADDRESS>;Database=<DB NAME>;User Id=<Somecharminglad>;Password=<SecretStuff>' Microsoft.EntityFrameworkCore.SqlServer -o Models -Tables "IAMATABLE", "IAMATABLE2", "IAMATABLE3" -ContextDir Context -Context PrototypeContext -verbose [-Force]

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ/ВНИМАНИЕ: -Forceбудет перезаписывать предыдущие файлы, используйте по своему усмотрению.

Используйте `-verbose`, если можете, так как вам нужен бумажный след (журналы) с точки зрения того, что было получено, а что нет.

Вы обнаружите, что ваши таблицы переведены в модели классов C#, а ваш DbContext настроен так, что он может управлять связью между уровнем API и уровнем БД. Теперь вам просто нужно сделать все за вас Startup.cs .

Вот мой.

public void ConfigureServices(IServiceCollection services)
{
    var connection = Configuration["ConnectionString:<DB NAME"];
    services.AddDbContext<AVL_DBContext>(options => options.UseSqlServer(connection));
    services.AddScoped<AVL_DBContext>();
services
        .AddControllers();
services
        .AddSwaggerGen(c =>
        {
            c.SwaggerDoc("1.0.0", new OpenApiInfo
            {
                Version = "1.0.0",
                Title = "Some gorgeous API",
                Description = "A gorgeous API (ASP.NET Core 2.0)",
                Contact = new OpenApiContact()
                {
                    Name = "A Team where I surround myself with smarter people than me",
                    Url = new Uri("https://canada-canada-canada.ca"),
                    Email = "[email protected]"
                },
                TermsOfService = new Uri("http://... I guess we should go with MIT License?")
            });
            c.IncludeXmlComments($"{AppContext.BaseDirectory}{Path.DirectorySeparatorChar}{_hostingEnv.ApplicationName}.xml");
        });
}
/// <summary>
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
/// </summary>
/// <param name="app"></param>
/// <param name="env"></param>
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
app.UseSwagger();
    app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/1.0.0/swagger.json", "A Gorgeous API");
        });
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Когда вы закончите формировать свой sqlserver и запустите его один раз, просмотрите модели и убедитесь, что ключи, ограничения, триггеры, индексы и т. д. sqlserver правильно обрабатываются вашим кодом, иначе вы столкнетесь с проблемами позже. Как сказал бы @Cmdr_Hadfield: Что меня убьет в следующий раз?, и готовьтесь заранее!

Обязательно ознакомьтесь с документацией:

.NET Core 3.1: https://docs.microsoft.com/en-us/dotnet/core/

Настоятельно рекомендуем Swagger Hub для создания элегантных API в экспресс-режиме: https://app.swaggerhub.com/

Спецификации Swagger: https://swagger.io/docs/specification/about/

Scaffold-DB для .NET Core: https://docs.microsoft.com/en-us/ef/core/managing-schemas/scaffolding

Шаблон React-Redux: https://github.com/react-boilerplate/react-boilerplate

Примечание: я не думаю о webpack, react-redux, npm, всем этим я доволен стандартами, установленными этим шаблоном. Вернитесь и посмотрите эту ‹Ссылку› здесь для моих заметок о том, как эффективно начать работу с вашим приложением react-redux. В нем даже есть предварительно написанные тесты, поэтому вы можете повторно применить тот же код для своего собственного решения. Я рекомендую вам уже выполнить прошлые работы/проекты в React, Redux, Webpack, Node.JS/npm, модульное тестирование JS, прежде чем пропустить вперед и просто использовать шаблонный код, так как вы можете очень быстро потеряться и не сможете объяснить свой код. вашим товарищам по команде (суперплохое нет-нет в индустрии в наши дни).

ОБНОВЛЕНИЕ (ЯНВАРЬ 2020 г.): Если вы похожи на меня и у вас возникли проблемы с DbContext + попыткой создать многопользовательскую архитектуру базы данных, чтобы запросы API + аутентификация другой службы сообщали API, какую базу данных использовать. т.е. DB_1 — для пользователей 1-й организации, а DB_2 — для пользователей 2-й организации. Пожалуйста, спасите меня, я не разобрался.

Есть вопрос, я на https://twitter.com/dragonSwords98. Не обращая внимания на критику профессиональных названий ручек, я сделал это, когда у меня еще были волосы.

Не забудьте встать и потянуться, улыбнуться и подписаться на мою собаку в IG @journey.kleekai