This is the third in what is turning into a series of post about using SQLite with Entity Framework Core. This post is going to cover adding a migration, scaffolding a controller and related views, and a few things that are harder to do using SQLite. The following are the first two post.
Entity Framework Core with SQLite
Entity Framework Core Errors Using Add-Migration
Adding Model, DbContext, Controller, and Views
If you have any experience with Entity Framework Core or have read any of my past entries on the subject this section is going to repeat some of the same information, but I am including it so someone who is looking for a full example will have it.
Model
In the Models folder add a Contact class similar the following.
public class Contact { public int Id { get; set; } public string Name { get; set; } public string Address { get; set; } public string City { get; set; } public string State { get; set; } public string PostalCode { get; set; } public string Phone { get; set; } public string Email { get; set; } }
DbContext
In the Data folder add a ContactsDbContext that inherits from DbContext. The following is an example that auto applies migrations to a database, if you don’t need that functionality it can be dropped out.
public sealed class ContactsDbContext : DbContext { private static bool _created; public DbSet<Contact> Contacts { get; set; } public ContactsDbContext(DbContextOptions<ContactsDbContext> options) : base(options) { if (_created) return; Database.Migrate(); _created = true; } }
Now that the application has a model and a related DbContext the following can be used to add a migration that will create a Contacts in the SQLite database. Run from the Package Manager console.
Add-Migration AddContacts -Context ContactsDbContext
Add-Migration is a Powershell command to add a migration (surprise!), AddContacts is the name of the migration and -Context ContactsDbContext is an argument that lets the command know which DbConext to use. The Context is only needed if your application has more than one DbContext.
Controller and Views
With the above complete Visual Studio provides some tooling that makes it very fast to create a controller with views for listing, adding, editing, and deleting items. To begin right-click on the Controllers folder and select Add > New Scaffolded Item.
Select the MVC Controller with views, using Entity Framework option and click Add.
On the next dialog use the drop downs to select a model class and a data context class. Then verify the controller name and click add.
When the process completes the following items will have been added to your project.
Controllers - ContactsController.cs Views - Contacts - Create.cshtml - Delete.cshtml - Details.cshtml - Edit.cshtml - Index.cshtml
Add to nav bar
To add a link to the new section of the app to the nav bar open the _Layout.cshtml in the Views/Shared/ directory. The following is the section of the file that needs to be changed to add an item to the nav bar.
<ul class="nav navbar-nav"> <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li> <li><a asp-area="" asp-controller="Contacts" asp-action="Index">Contacts</a></li> <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li> <li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li> </ul>
Specifically, the following line was added to provide access to the contact list page.
<li><a asp-area="" asp-controller="Contacts" asp-action="Index">Contacts</a></li>
Wrapping up
With the above, the application will be runnable. The code for this post can be found here. The next post in this series will cover the limitations of migrations when using SQLite with Entity Framework Core.