Метод OnDelete
Метод OnDelete настраивает действия удаления между реляционными сущностями. Мы можем добавить этот метод в конец конфигурации отношений, чтобы решить, как будут выполняться действия удаления.
В методе OnDelete можно использовать следующие значения:
- Restrict — действие удаления не применяется к зависимым объектам. Это означает, что мы не можем удалить основную сущность, если у нее есть связанная зависимая сущность.
- SetNull — зависимая сущность не удаляется, но для ее свойства внешнего ключа установлено значение null.
- ClientSetNull — если EF Core отслеживает зависимую сущность, ее внешний ключ имеет значение null, и эта сущность не удаляется. Если он не отслеживает зависимую сущность, то применяются правила базы данных.
- Cascade — зависимая сущность удаляется вместе с основной сущностью.
Мы также можем видеть это из кода в нашем файле миграции:
Мы можем изменить этот тип поведения, изменив код конфигурации в классе :
Давайте создадим еще один перенос:
И взгляните на сгенерированный код миграции:
Доступ к сущностям БД
То, что Entity ставит во главу концептуальную модель освобождает программиста от необходимости писать специализированные (для конкретной БД) SQL запросы и вызывать хранимые процедуры.
Следующий шаг после моделирования – это разработка кода манипуляции с сущностями в БД. Такой код разрабатывается на основе:
- Entity SQL;
- LINQ to Entities.
Оба подхода подразумевают запросы к концептуальной модели.
LINQ – это набор методов расширения языков .NET, позволяющий манипулировать сущностями в БД не зависящие от источника данных. Запросы LINQ транслируются деревья команд, а затем в запросы SQL, специфичные для хранилища.
Entity SQL – это обобщенный SQL, не зависимый от конкретного хранилища. Реализует более низкоуровневый подход.
Архитектура доступа к данным
Поставщик данных EntityClient – это надстройка над поставщиками конкретной БД. Он управляет запросами, переводит их в вид запросов к конкретной БД. Поставщик Entity работает с поставщиком реляционной БД через контекст обьекта.
Контекст обьекта – это класс производный от System.Data.Entity.DbContext или System.Data.Objects.ObjectContext и используется как контейнер сущностей. Он предназначен для фиксации изменений в БД, управляет распараллеливанием задач обращения к БД, через него производится вставка, обновление и удаление данных.
Рекомендации по сопоставлению операций CUD с хранимыми процедурами Considerations when Mapping the CUD Operations to Stored Procedures
При сопоставлении операций CUD с хранимыми процедурами применяются следующие соображения. When mapping the CUD operations to stored procedures, the following considerations apply:
- При сопоставлении одной из операций CUD с хранимой процедурой сопоставьте все эти операции. If you are mapping one of the CUD operations to a stored procedure, map all of them. Если не выполнить сопоставление всех трех, несопоставленные операции завершатся неудачей, если они будут выполнены, и будет выдано исключение упдатиксцептион will. If you do not map all three, the unmapped operations will fail if executed and an UpdateException will be thrown.
- Необходимо сопоставлять каждый параметр хранимой процедуры со свойствами сущности. You must map every parameter of the stored procedure to entity properties.
- Если сервер создает значение первичного ключа для вставленной строки, необходимо преобразовать это значение обратно в свойство ключа сущности. If the server generates the primary key value for the inserted row, you must map this value back to the entity’s key property. В следующем примере процедура инсертперсон stored Возвращает созданный первичный ключ как часть результирующего набора хранимой процедуры. In the example that follows, the InsertPerson stored procedure returns the newly created primary key as part of the stored procedure’s result set. Первичный ключ сопоставляется с ключом сущности (PersonID) с помощью привязок результатов feature конструктора EF. The primary key is mapped to the entity key (PersonID) using the feature of the EF Designer.
- Вызовы хранимых процедур сопоставляются с сущностями в концептуальной модели 1:1. The stored procedure calls are mapped 1:1 with the entities in the conceptual model. Например, если в концептуальной модели реализуется иерархия наследования, а затем сопоставляются хранимые процедуры CUD для родительских (базовых) и дочерних (производных) сущностей, сохранение дочерних изменений будет вызывать только дочернийэлемент хранимых процедур, они не активируют вызовы хранимых процедур родительскогообъекта. For example, if you implement an inheritance hierarchy in your conceptual model and then map the CUD stored procedures for the Parent (base) and the Child (derived) entities, saving the Child changes will only call the Child’s stored procedures, it will not trigger the Parent’s stored procedures calls.
Создание классов модели
Работа с Entity при подходе Code First начинается с создания типов данных. Типом, описывающим жильца будет класс Tenant, описывающим квартиру – класс Apartment.
Создайте в папке Models проекта соответствующие файлы классов и определите их как показано ниже:
Файл Tenant.cs:
Файл Apartment.cs:
Оба класса будут преобразованы в наборы данных, то есть таблицы базы данных с помощью Entity. Их свойства станут столбцами таблиц. Значение этих свойств значениями в строках.
Чтобы Entity понял, как преобразовать тип C# в тип базы данных, мы при определении должны следовать нескольким правилам:
- все свойства должны быть открытыми (public);
- свойство, которое должно стать первичным ключом таблицы должно иметь имя ID, либо его имя должно оканчиваться на ID (CustomerID, BisnessID, ApartmentID)
- если нужно пометить свойство как первичный ключ будущей сущности, но его имя не содержит ID, то сделайте это с помощью атрибута ;
- если класс не содержит ни одного свойство содержащего в имени ID, Entity сам добавит такой столбец, имя этого столбца будет совпадать с именем таблицы.
Кроме обычных свойств классы моделей могут содержать виртуальные свойства. Они становятся навигационными свойствами при преобразовании в модель EDX. Навигационные свойства характеризуют связь между таблицами.
В нашем случае это связь один ко многим – несколько жильцов могут быть зарегистрированы в одной квартире. Поэтому класс Apartment содержит внутренний массив экземпляров Tenant.
Добавление настроек базы данных при ее инициализации
Помимо добавления данных по умолчанию, в базе данных можно определить и другие настройки, которые будут применены при инициализации. Например, вы можете создать индекс для столбца FirstName таблицы Customers, чтобы ускорить поиск по имени покупателя в этой таблице. Чтобы определить различные настройки, вы можете использовать метод DbContext.Database.ExecuteSqlCommand(), в который передается произвольная SQL-команда для настройки различных аспектов базы данных. Этот метод вызывается также, в переопределенном методе Seed() объекта инициализации. В следующем примере показано, как задать индекс для столбца CustomerId:
Очевидно, что с помощью этого метода вы можете выполнить любую SQL-команду для настройки базы данных. На рисунке ниже показан добавленный в таблицу индекс:
Для разработки новых приложений мы рекомендуем ASP.NET Core Razor Pages по ASP.NET MVC контроллеры и представления. For new development, we recommend ASP.NET Core Razor Pages over ASP.NET MVC controllers and views. Для следующего вида серии руководств см. в разделе с помощью Razor Pages, руководства: Начало работы с Razor Pages в ASP.NET Core. For a tutorial series similar to this one using Razor Pages, see Tutorial: Get started with Razor Pages in ASP.NET Core. Новый учебник. The new tutorial:
- проще для выполнения; Is easier to follow.
- содержит больше рекомендаций по EF Core; Provides more EF Core best practices.
- использует более эффективные запросы; Uses more efficient queries.
- более актуально, так как используются новейшие API; Is more current with the latest API.
- охватывает дополнительные возможности; Covers more features.
- является предпочтительным подходом для разработки новых приложений. Is the preferred approach for new application development.
В этой серии руководств вы узнаете, как создать приложение ASP.NET MVC 5, использующий Entity Framework 6 для доступа к данным. In this series of tutorials, you learn how to build an ASP.NET MVC 5 application that uses Entity Framework 6 for data access. В этом учебнике используется Code First рабочего процесса. This tutorial uses the Code First workflow. Сведения о том, как выбрать Code First, Database First или Model First, см. в разделе создать модель. For information about how to choose between Code First, Database First, and Model First, see Create a model.
В этой серии руководств описывается построение примера приложения университета Contoso. This tutorial series explains how to build the Contoso University sample application. Пример приложения веб-сайт простой университета. The sample application is a simple university website. С ним вы можете просматривать и обновлять учащихся, курсах и сведения о преподавателе. With it, you can view and update student, course, and instructor information. Ниже приведены два созданных экранов. Here are two of the screens you create:
В этом учебнике рассмотрены следующие задачи. In this tutorial, you:
- Создать веб-приложение MVC Create an MVC web app
- Настройка стиля сайта Set up the site style
- Установка Entity Framework 6 Install Entity Framework 6
- Создание модели данных Create the data model
- Создание контекста базы данных Create the database context
- Инициализация базы данных с тестовыми данными Initialize DB with test data
- Настройка EF 6 для использования LocalDB Set up EF 6 to use LocalDB
- Создание контроллера и представлений Create controller and views
- Просмотр базы данных View the database
Why Entity Framework?
Entity Framework is an ORM and ORMs are aimed to increase the developer’s productivity by reducing the redundant task of persisting the data used in the applications.
-
Entity Framework can generate the necessary database commands for reading or writing data in the database and execute them for you.
-
If you’re querying, you can express your queries against your domain objects using LINQ to entities.
-
Entity Framework will execute the relevant query in the database and then materialize results into instances of your domain objects for you to work within your app.
There are other ORMs in the marketplace such as NHibernate and LLBLGen Pro. Most ORMs typically map domain types directly to the database schema.
Entity Framework has a more granular mapping layer so you can customize mappings, for example, by mapping the single entity to multiple database tables or even multiple entities to a single table.
-
Entity Framework is Microsoft’s recommended data access technology for new applications.
-
ADO.NET seems to refer directly to the technology for data sets and data tables.
-
Entity Framework is where all of the forward moving investment is being made, which has been the case for a number of years already.
-
Microsoft recommends that you use Entity Framework over ADO.NET or LINQ to SQL for all new development.
Какие существуют типы версий выпуска .Net Framework?
Существует несколько версий .NET Framework. У каждого есть свой набор инструментов, библиотек и технических возможностей.
- .NET Framework 2.0 представляет собой базовый уровень для последующих .NET Framework. Он включает в себя функции CLR, FCL, WinForms, ASP.NET, ADO.NET.
- В . NET Framework 3.0 разработчики программного обеспечения сосредоточились в основном на функциональности платформы и добавили функции WPF, WCF WF и CardSpace в версию 2.0.
- .NET Framework 3.5 были добавлены функции LINQ и Entity Framework, которые улучшили запросы и управление данными.
- .NET Framework 4.0 получил Parallel LINQ и библиотеку параллельных задач, позволяющую делать параллельные запросы. Кроме того, этот фреймворк хорошо совместим с приложениями, созданными с помощью предыдущих версий фреймворка, и в нём улучшены стандарты безопасности и соответствия, надёжность и корректность.
- В .NET Framework 5 добавлены / NET API для приложений Store / UWP и асинхронной модели на основе задач. Это означает, что эта структура подходит для создания приложений Магазина Windows и делает асинхронные функции интуитивно понятными и понятными.
В настоящее время преданные последователи .NET с нетерпением ждут выпуска .NET 5, который будет поддерживать Windows, Linux, macOS, iOS, Android, tvOS, watchOS, WebAssembly и другие платформы.
Entity Framework Architecture
Entity Framework consists of the following three layers:
Object Service
Object Service is the top layer in the Entity Framework architecture. It maintains the session between application and database. It performs CRUD operations with the help of queries. It represents the model entities of an application.
Entity Client
Entity Client is the core layer in Entity Framework, which connects the data source layer to the Object Service layer with the help of providers. It allows developers to write LINQ queries and read or write data without generating classes of conceptual schema.
Data Providers
Data Provider layer is directly linked to the database. It is responsible to parse the query into a native SQL command expression in the database and then provide results back into domain objects of application.
You can insert a new user into data source by using an Entity Framework Code-First approach in the following example:
DbContext Update
The class provides and methods for working with individual or multiple entities.
As with setting the entity’s , this method results in the entity being tracked by the context as . Once again, the context doesn’t have any way of identifying which property values have been changed, and will generate SQL to update all properties. Where this method differs from explicitly setting the property, is in the fact that the context will begin tracking any related entities (such as a collection of books in this example) in the state, resulting in statements being generated for each of them. If the related entity doesn’t have a key value assigned, it will be marked as , and an statement will be generated.
Database migrations
Up to this point, we should have a schema expressed through the that we can apply to a database, although we’ve yet to apply any changes to our database. In our case, we are using an SQLite database so that folks can get up and running quickly with few external dependencies. Let’s initialize our database. From the Terminal tool window in JetBrains Rider, let’s run the following command.
> dotnet ef migrations add InitialCreate --project Entertainment
By executing the command, we will build our current EF Core project and create our initial migrations. Our migration should have a timestamp prefix. Since migrations are chronological, the prefix is an essential tool for making sense of the changes occurring to our schema.
We should have some additional files in our project under the folder. These files are source control friendly, allowing multiple individuals to work on the without fear of irreparable conflicts or lost work. Since the CLI tool generates and manages these files, we should resist the urge to modify these files via the IDE.
We can apply our migrations with the following command:
> dotnet ef database update --project Entertainment
Executing the command will apply our migrations up to the latest.
Build started... Build succeeded. Applying migration '20201023150600_InitialCreate'. Done.
We can use Rider’s database tool window to make sure that our migrations were applied correctly.
Additionally, we can ask Rider to diagram our database tables, showing the relationships that we modeled during the code-first design phase of this tutorial.
To test that our data has been seeded, we can use Rider’s built-in SQL query console. One of our favorite features is database introspection, which suggest SQL joins according to the current schema in the dialect of the target database engine.
Сведения о пакетах NuGet EF Core About EF Core NuGet packages
Чтобы реализовать поддержку EF Core в проекте, установите поставщик целевой базы данных. To add EF Core support to a project, install the database provider that you want to target. В этом учебнике используется SQL Server, для которого требуется пакет поставщика Microsoft.EntityFrameworkCore.SqlServer. This tutorial uses SQL Server, and the provider package is Microsoft.EntityFrameworkCore.SqlServer. Этот пакет входит в метапакет Microsoft.AspNetCore.App, поэтому ссылаться на него не нужно. This package is included in the Microsoft.AspNetCore.App metapackage, so you don’t need to reference the package.
Этот пакет EF SQL Server и его зависимости ( Microsoft.EntityFrameworkCore и Microsoft.EntityFrameworkCore.Relational ) обеспечивают поддержку среды выполнения для платформы EF. The EF SQL Server package and its dependencies ( Microsoft.EntityFrameworkCore and Microsoft.EntityFrameworkCore.Relational ) provide runtime support for EF. Пакет средств будет добавлен позднее в рамках учебника Миграции. You’ll add a tooling package later, in the Migrations tutorial.
Дополнительные сведения о других поставщиках баз данных, которые доступны для платформы Entity Framework Core, см. в разделе Поставщики баз данных. For information about other database providers that are available for Entity Framework Core, see Database providers.
Конфигурация отношений Many-to-Many (многие-ко-многим)
Это реализация версии 3.1 EF Core. Это справедливо для EF Core версии 5, но в версии 5 это можно было бы сделать немного иначе. Мы объясним это в следующем разделе.
Прежде чем мы начнем объяснять, как настроить эту связь, давайте создадим необходимые классы в проекте :
Теперь мы можем изменить классы и , предоставив свойство навигации для каждого класса по направлению к классу :
В Entity Framework Core мы должны создать объединяющуюся сущность для объединяемой таблицы (StudentSubject). Этот класс содержит внешние ключи и свойства навигации из классов и . Кроме того, классы и имеют свойства навигации ICollection по отношению к классу . Таким образом, отношения «многие ко многим» — это всего лишь два отношения «один ко многим».
Мы создали наши сущности, и теперь нам нужно создать необходимую конфигурацию. Для этого давайте создадим класс в папке Entities/Configuration:
Как мы уже говорили, многие-ко-многим — это всего лишь две взаимосвязи EF Core «один ко многим», и это именно то, что мы настраиваем в нашем коде. Мы создаем первичный ключ для таблицы , который в данном случае является составным ключом. После настройки первичного ключа мы используем знакомый код для создания конфигураций отношений.
Теперь нам нужно изменить метод в классе :
После этих изменений мы можем создать миграцию и применить ее:
Вот результат:
Отличная работа. Давай продолжаем.
Примечание по .NET 5
В .NET 5 нам не нужны ни таблица , ни класс . По умолчанию, если наш класс имеет свойство навигации для класса , а класс имеет свойство навигации для класса , этого вполне достаточно. Никакой дополнительной настройки не требуется.
По сути, класс Student должен иметь , а класс Subject должен иметь свойство. Нет необходимости ни в третьем классе, ни в свойствах навигации для этого класса.
Но если вы хотите изначально заполнить данные для таблиц Student и Subject и заполнить третью таблицу идентификаторами обоих таблиц, вам придется использовать реализацию, которую мы использовали для версии 3.1.
Вопросы для .NET-разработчиков уровня Middle
Общие вопросы
54. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время на HTTP-уровне?
55. Как работает HTTPS?
56. Как вы понимаете SOLID?
57. Какие протоколы сериализации вы знаете и где они применяются?
58. Что такое в вашем понимании чистая функция? Какие у нее преимущества?
59. Что такое dependency injection и зачем оно нужно?
60. Что такое cohesion и coupling (связанность и связность)?
61. Что такое IaaS, PaaS, SaaS и каковы различия между ними?
62. Какие способы отладки программы вы используете?
63. Какие знаете паттерны? Объясните суть перечисленных.
64. В чем суть паттерна Singleton? Почему его еще называют антипаттерном?
65. Для чего нужен паттерн Strategy?
66. каковы ключевые различия между распределенными системами и монолитными?
67. Какие паттерны проектирования распределенных систем вы знаете?
68. Какие есть принципы работы Message bus? Почему могут возникать дубликаты в очередях?
69. Какие принципы построения идемпотентности сервисов знаете?
70. Расскажите, как работают асинхронные методы? Чем асинхронность отличается от параллелизма?
Платформа .NET
71. Какие исключения нельзя остановить в блоке catch?
72. В чем разница между .NET Standard Class Library и .NET Core Class Library?
73. Объясните разницу между отложенным и немедленным исполнением в LINQ. Приведите примеры.
74. Для чего нужен метод ConfigureServices в Startup.cs?
75. В чем разница между services.AddTransient и services.AddScope в ASP.NET Core?
76. Что такое Kestrel?
77. Опишите ASP.NET MVC request pipeline.
78. Как в ASP.NET WebAPI настроить кэширование ответов на HTTP-запросы?
Управление памятью
79. Что такое куча и стек? Различия, принцип работы.
80. Как работает сборщик мусора?
81. Зачем нам зарезервированное слово using в C#, если в .NET есть автоматическое управление памятью? Как с этим связан disposable-паттерн и зачем такой сложный паттерн для managed и unmanaged ресурсов?
82. Каковы особенности работы с Large Object Heap?
Типы данных, коллекции и структуры данных
83. Когда генерируется дженерик-класс конкретного типа — при выполнении программы или во время компиляции?
84. Что такое рефлексия?
85. Расскажите о коллекции . Чем она отличается от других коллекций?
86. Что такое индексатор?
87. Что такое immutable object? Какие преимущества дает использование immutable object? Предложите способ реализации его в .NET.
88. Когда использовать StringBuilder, а когда string? Как работает StringBuilder?
89. Что такое балансирование деревьев?
90. Что такое Key-value структуры?
100. Что такое хэш-функция и зачем нужны хэш-таблицы?
101. Какими свойствами должна обладать идеальная хеш-функция?
102. Что такое коллизии и как с ними бороться?
103. В чем заключается сложность CRUD-операций в в .NET?
104. Где хранятся массивы? А массивы примитивных типов?
105. В чем отличие между массивом () и списком ()?
106. В чем разница между и ?
107. Зачем нужны Enumerable, Observable, AsyncEnumerable и какие модели получения данных они реализуют?
108. В чем разница между IEnumerable и IQueryable?
109. Что такое enum flags?
Базы данных
110. Расскажите о нормальных формах в СУБД.
111. Что такое индекс в БД?
112. Когда следует использовать индексы? Преимущества и недостатки.
113. Какие типы индексов существуют? Чем они отличаются?
114. Что такое ACID?
115. Какие вы знаете уровне изоляции транзакций?
116. Что такое план выполнения запроса (execution plan) в MS SQL?
117. Проблема: запрос долго выполняется. Какие методы ее диагностики и решения?
118. Как ORM (Entity Framework или Entity Framework Core) транслируют C#-код в язык запросов базы данных? Что для этого используется?
Параллелизм
119. Для чего использовать Task.ConfigureAwait?
120. Например, есть веб-сервер, который по HTTP-запросом делает выборку из базы данных. Всего на сервере 16 тредов (threads). Каждый HTTP-request выполняет запрос в базу и ожидает результатов, в этом случае тред блокируется. Можно ли оптимизировать эту работу средствами .NET?
121. Зачем нужен ThreadPool? Опишите механику работы: как поток выделяется и возвращается обратно в ThreadPool.
Photo by LinkedIn Sales Navigator on Unsplash
Чего ожидать от .NET 5 в ближайшем будущем?
В .NET Framework ожидаются серьёзные изменения в ноябре 2020 года с выпуском .NET 5. Многие разработчики .NET задаются вопросом, что же произойдёт с .NET Framework, когда будет выпущена .NET 5.
Ожидается, что .NET 5 станет унифицированной платформой, вобравшей в себя лучшие функции .NET Framework и .NET Core. Кроме того, .NET 5 предоставит разработчикам программного обеспечения функции разработки IoT, мобильных и игровых консолей. В результате .NET 5 будет поддерживать стратегию Java «Написано один раз, запускается везде», что устраняет необходимость писать код для каждой платформы отдельно.
.NET 5 получит ещё несколько обновлений, в том числе:
- EF 6 будет заменён Entity Framework Core. Entity Framework Core будет иметь новые функции, такие как поддержка запросов LINQ, миграция схем, SQL Server и SQL Azure, SQLite, Azure Cosmos DB, MySQL, поддержка базы данных PostgreSQL и другие.
- ASP.NET будет заменён на ASP.NET Core. Это упростит создание облачных веб-приложений в Windows, macOS и Linux.
- ASP.NET Core MVC объединит ASP.NET MVC и веб-API. Он будет оптимизирован для использования в ASP.NET Core. Эта технология позволяет создавать динамические веб-сайты с помощью TDD-дружественной разработки и использования новейших веб-стандартов.
- MSIX заменит установщик пакетов MSI, чтобы обеспечить современные возможности упаковки для всех приложений, работающих в Windows.
- Часть API JsonDocument будет заменена на System.Text.Json.JsonDocument, который предоставляет более широкий спектр API.
- Blazor в ASP.NET для создания интерактивных пользовательских веб-интерфейсов, работающих на C #.
- Xamarin распространяется на создание приложений для iOS, Android, macOS и многих других.
- ML.NET — библиотека, используемая для машинного обучения, которая работает на языках программирования C #, F # и Python.
Предстоящая .NET 5 будет включать все необходимые библиотеки, API-интерфейсы и инструменты для создания полноценного кроссплатформенного программного обеспечения с открытым исходным кодом. Он открывает новую эру для роста .NET, переходя от устаревшей версии Windows к современной и многообещающей разработке с открытым исходным кодом.
Устранение неполадок Troubleshooting
Если вы столкнулись с проблемами, для их решения можно попробовать сравнить свой код с кодом готового проекта. If you run into a problem you can’t resolve, you can generally find the solution by comparing your code to the completed project. Список распространенных ошибок и способы их устранения см. в разделе «Устранение неполадок» последнего руководства серии. For a list of common errors and how to solve them, see the Troubleshooting section of the last tutorial in the series. Если вам не удалось найти нужную информацию, вы можете задать вопрос на сайте StackOverflow.com в разделах, посвященных ASP.NET Core или EF Core. If you don’t find what you need there, you can post a question to StackOverflow.com for ASP.NET Core or EF Core.
Эта серия включает в себя 10 учебников, содержание каждого из которых базируется на предыдущих учебниках. This is a series of 10 tutorials, each of which builds on what is done in earlier tutorials. После успешного завершения каждого руководства рекомендуется сохранять копию проекта. Consider saving a copy of the project after each successful tutorial completion. Таким образом, при возникновении проблем вы сможете вернуться к предыдущему учебнику, а не к началу серии. Then if you run into problems, you can start over from the previous tutorial instead of going back to the beginning of the whole series.
Создание веб-приложения Create web app
Запустите Visual Studio. Open Visual Studio.
В меню Файл выберите пункт Создать > Проект. From the File menu, select New > Project.
В области слева выберите Установленные > Visual C# > Интернет. From the left pane, select Installed > Visual C# > Web.
Выберите шаблон проекта Веб-приложение ASP.NET Core. Select the ASP.NET Core Web Application project template.
Введите имя ContosoUniversity и нажмите кнопку ОК. Enter ContosoUniversity as the name and click OK.
Дождитесь появления диалогового окна Создание веб-приложения ASP.NET Core. Wait for the New ASP.NET Core Web Application dialog to appear.
Выберите .NET Core, ASP.NET Core 2.2 и шаблон Веб-приложение (модель — представление — контроллер) . Select .NET Core, ASP.NET Core 2.2 and the Web Application (Model-View-Controller) template.
Убедитесь, что для параметра Проверка подлинности задано значение Без проверки подлинности. Make sure Authentication is set to No Authentication.
Нажмите кнопку ОК Select OK
Как узнать об ORM?
Ну, используйте один. Какую бы библиотеку ORM вы ни выбрали, все они используют одни и те же принципы. Здесь много библиотек ORM:
- Java: Hibernate.
- PHP: Propel или Doctrine (я предпочитаю последний).
- Python: Django ORM или SQLAlchemy (моя любимая библиотека ORM).
- С#: NHibernate или Entity Framework
Если вы хотите попробовать библиотеку ORM в веб-программировании, вам лучше использовать весь стек фреймворков, например:
- Symfony (PHP, использующий Propel или Doctrine).
- Django (Python, использующий внутренний ORM).
Не пытайтесь написать свой собственный ORM, если вы не пытаетесь чему-то научиться. Это гигантский кусок работы, а старым потребовалось много времени и работы, прежде чем они стали надежными.
Заключение
Платформа .NET развивается вместе с техническим прогрессом уже более 18 лет. Всё это время он предоставлял своим пользователям первоклассные инструменты для создания надёжных и эффективных программных решений. Таким образом, .NET представляет собой безопасный и хорошо продуманный инструмент для создания любых приложений.
Если вы решите создать своё программное обеспечение с использованием платформы .NET, важно найти подходящую компанию по разработке .NET, которая сможет профессионально использовать различные инструменты разработки .NET и будет готова предоставить вам лучшее программное решение