Entity Framework Main (EF Main for quick) is a preferred ORM (item-relational mapper) from Microsoft that allow for you to carry out CRUD functions (produce, go through, update, and delete) without the need of acquiring to know how the data is persisted in the fundamental database.
When doing the job with ORMs, we frequently leverage types that are mapped to databases tables. Nonetheless, what if we have a model that doesn’t mimic a databases table? How can we map non-entity styles and populate objects of this kind of a design in our purposes? We can attain this with query varieties.
In the beginning launched in EF Core 2.1, query varieties are non-entity kinds (courses) that can map to tables or sights in the databases with no an id column specified, that means tables and views that lack a critical. EF Main question styles make it easier to question views and model styles that really don’t demand identification columns. However, for the reason that question varieties really do not have an id column defined, you cannot insert, update, or delete facts making use of them. You can use them only to retrieve the facts.
Question forms enable you to specify a mapping among a database question and your domain courses. You can then use the identical question form with various styles of EF Core queries, these types of as LINQ to Entities or EF Core Migrations.
This posting discusses how we can use EF Core query kinds in ASP.Net Main 7 programs. To work with the code illustrations offered in this posting, you ought to have Visual Studio 2022 Preview mounted in your system. If you don’t by now have a duplicate, you can download Visible Studio 2022 below.
Build an ASP.Web Core 7 Net API venture in Visible Studio 2022
1st off, let us create an ASP.Web Main Net API task in Visual Studio 2022. Next these ways will generate a new ASP.Net Core World wide web API challenge in Visible Studio 2022:
- Launch the Visible Studio 2022 IDE.
- Click on on “Create new job.”
- In the “Create new project” window, decide on “ASP.Web Core Website API” from the record of templates shown.
- Click Next.
- In the “Configure your new project” window, specify the identify and place for the new venture.
- Optionally examine the “Place remedy and challenge in the exact same directory” check box, based on your tastes.
- Click Subsequent.
- In the “Additional Information” window shown subsequent, under Framework, decide on .Net 7..
- Leave the check out box that states “Use controllers…” checked considering the fact that we’ll be making use of controllers in this case in point. Leave the “Authentication Type” set to “None” (default).
- Guarantee that the verify containers “Enable Docker,” “Configure for HTTPS,” and “Enable Open up API Support” are unchecked as we won’t be applying any of all those features in this article.
- Click on Build.
We’ll use this ASP.Web Main 7 Internet API challenge to function with EF Main query kinds in the subsequent sections of this posting.
Performing with query types in ASP.Internet Main 7
Let’s start by building some entities that we can query. We’ll use the adhering to two courses, Teacher and Batch, in our instance.
community course Instructor
community int Id get established
community string FirstName get set
public string LastName get set
public ICollection Batches get established
community class Batch
public int Id get set
public string Title get established
public int NoOfStudents get set
general public int TeacherId get set
Generate a check out in your database
Now create a view named BatchDetails in your databases with the next code. We’ll use query styles to map to this view.
Develop Watch BatchDetails AS
Pick t.FirstName, t.LastName, t.BatchTitle, t.NoOfStudents as Whole_College students
From Trainer t
Sign up for Batch b on b.Id = t.Id
We will also have to have a class that can be used to retail outlet the knowledge retrieved from the see we just designed. The pursuing code snippet illustrates how you can produce a class named BatchDetails to store the knowledge queried from the see.
general public course BatchDetails
general public string FirstName get set
community string LastName get set
community string Title get established
public int NoOfStudents get established
Configure the query variety in EF Main
You have two strategies to configure the question variety. If you want to refrain from cluttering your DbContext, you can produce your DbContext course as a partial course and then split the DbQuery declaration into a different file altogether.
Here is the written content of the DemoDbContext.cs file:
public partial course DemoDbContext : DbContext
public DbSet Lecturers get established
public DbSet Batches get set
And below is the information of the DemoDbContextQuery.cs file:
community partial class DemoDbContext : DbContext
general public DbQuery Batches get established
You need to configure the query sort in the OnModelCreating system as demonstrated in the code snippet given beneath.
guarded override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Query().ToView("BatchDetails")
Build a repository in ASP.Internet Core
We’ll now make a repository to study information from the database. Be aware that, although the repository will interact with the database instantly, the controller will use the repository to get info. (We’ll implement the controller in the following part.)
Create a file named IBatchRepository.cs with the adhering to code. IBatchRepository will serve as the interface for our BatchDetailsRepository.
community interface IBatchDetailsRepository
community Record GetBatchDetails()
Build an additional file named BatchDetailsRepository.cs and enter the next code to make the repository course.
general public class BatchDetailsRepository: IBatchDetailsRepository
non-public DemoDbContext dbContext
community BatchDetailsRepository(DemoDbContext demoDbContext)
dbContext = demoDbContext
general public List GetBatchDetails()
return dbContext.BatchDetails.ToList()
Produce an API controller in ASP.Internet Core
Now, generate an API controller named BatchDetailsController in a file with the very same identify and a .cs extension. Then produce the adhering to code in there.
[Route("api/[controller]")]
[ApiController]
public class BatchDetailsController : ControllerBase
non-public IBatchDetailsRepository _batchDetailsRepository
general public BatchDetailsController(IBatchDetailsRepository
batchDetailsRepository)
_batchDetailsRepository = batchDetailsRepository
[HttpGet]
public IActionResult Get()
return Alright(_batchDetailsRepository.GetBatchDetails())
Refer to the preceding code listing. Notice how dependency injection has been used to inject an occasion of sort IBatchDetailsRepository in the constructor of the BatchDetailsController class.
You can return question forms from raw SQL queries applying the FromSql system in the DbQuery form and they can participate in interactions as very well.
Lastly, there are two constraints of question sorts you should preserve in thoughts. As mentioned above, simply because query varieties can not be tracked by the context, you can only use them for reads, not writes. And you can’t use the Insert and Connect procedures of the DbContext when performing with question styles.
Copyright © 2022 IDG Communications, Inc.