CRUD ASP.NET Core Using Entity Framework Core With Swagger

Base article

This article is going to handle the connection of an existing website to a local database using the entity framework Core. So, the starting point is going to be the following article:

What is Entity Framework Core?

EF Core is a lightweight, extensible, and cross-platform version of Entity Framework Read more about Entity Framework Core.

Benefits of using Entity Framework Core

  • Faster database setup
  • Easier to access data, reducing time to read and access data
  • Work directly with your complex objects, not with datasets/data tables
  • Less code, more control
  • No need to write queries, we use LINQ for Entities

Entity Framework vs Entity Framework Core

Entity Framework

  • Runs only on Windows
  • Can be used with .Net Framework
  • No more new features will be added here

Entity Framework Core

  • Is Cross-platform, so is not executable only on Windows
  • Can be used with .Net Core or .Net Framework
  • Keeps growing and getting better every day

Here we have a full comparison of functionalities between both.

Related articles

CRUD Implementation Step-by-Step

Adjust the model in order to make it able to be stored in a database,

public class ValueSamples  
{  
    [Key]
    public int Id { get; set; }  
    public string Name { get; set; }    
}  

Create your DB context file

This is the class that is going to connect to your database, each object declared inside the DbSet type is going to be a table.

public class CrudSampleContext : DbContext  
{  
    public CrudSampleContext(DbContextOptions<CrudSampleContext> options) : base(options)  
    {  
    }  
  
    public DbSet<ValueSamples> ValueSamples { get; set; }  
}  

Adjust your StartUp class

You must register and initialize your DB context using dependency injection.

public void ConfigureServices(IServiceCollection services)  
{  
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);  
    services.AddDbContext<CrudSampleContext>(options => options.UseSqlServer("your database connection string"));  
  
    // Register Swagger  
    services.AddSwaggerGen(c =>  
    {  
        c.SwaggerDoc("v1", new Info { Title = "Sample API", Version = "version 1" });  
    });  
}  

Getting your database connection string

  • Open Server Explorer and click on "Connect to Database".
    Database
  • Select Microsoft SQL Server.
    SQL Server
  • Pick up your server name and push OK.
    Server name
  • Check the result.
    Server Explorer
  • Right-click on your newly added Data Connection and go to properties.
    Data Connection
  • Get your connection string.
    Connection string
  • Your final Start Up class
    With your connection string, your StartUp should look like this.

The items in yellow were added from the connection string above.

public class Startup  
{  
    public Startup(IConfiguration configuration)  
    {  
        Configuration = configuration;  
    }  

    public IConfiguration Configuration { get; }  

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)  
    {  
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);  
        services.AddDbContext<CrudSampleContext>(options => options.UseSqlServer(@"Data Source=yourServer;Integrated Security=True;Database=CRUDSample"));  

        // Register Swagger  
        services.AddSwaggerGen(c =>  
        {  
            c.SwaggerDoc("v1", new Info { Title = "Sample API", Version = "version 1" });  
        });  
    }  

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
    {  
        if (env.IsDevelopment())  
        {  
            app.UseDeveloperExceptionPage();  

            // Enable middleware to serve generated Swagger as a JSON endpoint.  
            app.UseSwagger();  

            // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),  
            // specifying the Swagger JSON endpoint.  
            app.UseSwaggerUI(c =>  
            {  
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");  
            });  
        }  

        app.UseMvc();  
    }  
}  

Create your database

  • Add initial migration
    Open your Package Manager Console (PMC) and create your initial migration.
    Initial migration
  • Check the new folder in your project solution.
    Solution Explorer
  • Create the database
    Run the command update-database
    Command update
    Check your new Database in your SQL Server Management Studio
    Management Studio

CRUD Samples

Remember, to access your API through Swagger you must go to the Swagger endpoint. In my case, it is http://localhost:61986/swagger/index.html

Update your controller actions

  • Get
    • Code
      [HttpGet]
      public ActionResult<List<ValueSamples>> Get()
      {
          var itemLst = _crudSampleContext.ValueSamples.ToList();
          return new List<ValueSamples>(itemLst);
      }
      
    • Result from swagger
      Swagger
    • Database
      SSMS
  • Create
    • Code
      [HttpPost]
      public void Post([FromBody] ValueSamples createSample)
      {
          _crudSampleContext.ValueSamples.Add(createSample);
          _crudSampleContext.SaveChanges();
      }
      
    • Swagger
      API
    • Database
      SelectTopRows
  • Update
    • Code
      [HttpPut]
      public void Put([FromBody] ValueSamples updateSample)
      {
          _crudSampleContext.ValueSamples.Update(updateSample);
          _crudSampleContext.SaveChanges();
      }
      
    • Swagger
      Put Values
    • Database
      Updated Test
  • Delete
    • Code
      [HttpDelete("{id}")]
      public void Delete(int id)
      {
          var itemToDelete = _crudSampleContext.ValueSamples.Where(x => x.Id == id).FirstOrDefault();
          _crudSampleContext.ValueSamples.Remove(itemToDelete);
          _crudSampleContext.SaveChanges();
      }
      
    • Swagger
      Responses
    • Database
      CRUDSample
  • Single Get
    • Code
      [HttpGet("{id}")]
      public ActionResult<string> Get(int id)
      {
          var itemToReturn = _crudSampleContext.ValueSamples.Where(x => x.Id == id).FirstOrDefault();
          return itemToReturn.Name;
      }
      
    • Swagger
      Details

Your controller must look like this.

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    private readonly CrudSampleContext _crudSampleContext;

    public ValuesController(CrudSampleContext crudSampleContext)
    {
        this._crudSampleContext = crudSampleContext;
    }

    // GET api/values
    [HttpGet]
    public ActionResult<List<ValueSamples>> Get()
    {
        var itemLst = _crudSampleContext.ValueSamples.ToList();
        return new List<ValueSamples>(itemLst);
    }

    // GET api/values/5
    [HttpGet("{id}")]
    public ActionResult<string> Get(int id)
    {
        var itemToReturn = _crudSampleContext.ValueSamples.Where(x => x.Id == id).FirstOrDefault();
        return itemToReturn.Name;
    }

    // POST api/values
    [HttpPost]
    public void Post([FromBody] ValueSamples createSample)
    {
        _crudSampleContext.ValueSamples.Add(createSample);
        _crudSampleContext.SaveChanges();
    }

    // PUT api/values/5
    [HttpPut]
    public void Put([FromBody] ValueSamples updateSample)
    {
        _crudSampleContext.ValueSamples.Update(updateSample);
        _crudSampleContext.SaveChanges();
    }

    // DELETE api/values/5
    [HttpDelete("{id}")]
    public void Delete(int id)
    {
        var itemToDelete = _crudSampleContext.ValueSamples.Where(x => x.Id == id).FirstOrDefault();
        _crudSampleContext.ValueSamples.Remove(itemToDelete);
        _crudSampleContext.SaveChanges();
    }
}

Congratulations, you have successfully implemented your CRUD using Entity Framework Core.

External References