Обнаружили, что пытаетесь создать 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