There is a good chance that your web app uses a database. In my previous post introducing Azure App Service, I showed some of the benefits of hosting apps in Azure App Service, and how easy it is to get a basic site running in a few clicks. In this post I’ll show how to set up a SQL Azure database along with an App Service Web App from Visual Studio, and apply Entity Framework automatically as part of publish.
Let’s get going
To get started, you’ll first need:
- Visual Studio 2017 with the ASP.NET and web development workload installed (download now)
- An Azure account:
- Any ASP.NET or ASP.NET Core app that uses a SQL Database. For the purposes of this post, I’ll create a new ASP.NET Core app with Individual Authentication:
- Then select the “Individual User Accounts” radio button and click “OK”.
- Click OK.
I can now run my project locally (F5) and create user accounts which will be stored in a SQL Server Express Local DB on my machine.
Publishing to App Service with a Database
Let’s publish our application to Azure. To do this, I’ll right click my project in Solution Explorer and choose “Publish”
This brings up the Visual Studio publish target dialog, which will default to the Azure App Service pane with the “Create new” radio button selected. To continue click “Publish”.
This brings up the “Create App Service” dialog (see the “Key App Service Concepts” section of my previous post for an explanation of the fields). To create a SQL Database for our app to use, click the “Create a SQL Database” link in the top right section of the dialog.
This will bring up the “Configure SQL Database” dialog.
- Note: If you are using a Visual Studio Enterprise subscription, many regions will not let you create a SQL Azure database so I recommend choosing “East US” or “West US 2” depending on where you are located (we are adding logic in in the Visual Studio 2017 15.8 update to remove those regions if that’s the case, but for now you’ll need to choose an appropriate region). To do this, click the “New…” button next to your “Hosting Plan Dropdown” and pick the appropriate region (“East US” or “West US 2”).
- Since I don’t have an existing SQL Server, the first thing I need to do is create a server to host the database, so I’ll click the “New…” button next to the “SQL Server” dropdown,
- Choose a location for the database.
- Provide an administrator user name and password for the server
- Click “OK”
- Make sure the connection string name field matches the name of the connection string your application uses to access the database (if using a new project, it is “DefaultConnection” which will be prepopulated for you).
- Click OK
- Then click the “Create” button on the “Create App Service” dialog
It should take ~2-3 minutes to create all of the resources in Azure, then your application will publish and a browser will open to your home page.
Configuring EF Migrations
At this point there is a database for your app to use in the cloud, but EF migrations have not been applied, so any functionality that relies on the database (e.g. Registering for a user account) will result in an error.
To apply EF migrations to the database:
- Click the “Configure…” button on the publish summary page
- Navigate to the “Settings” tab
- When it finishes discovering data contexts, expand the “Entity Framework Migrations” section, and check the “Apply this migration on publish” for all of the contexts it finds
- Click “Save”
- Click Publish again, in the output window you should see “Generating Entity framework SQL Scripts” and then “Generating Entity framework SQL Scripts completed successfully”
That’s it, your web app and SQL Azure database are both configured and running in the cloud.
Hopefully, this post showed you how easy it is to try App Service and SQL Azure. We believe that for most people, App Service is the easiest place to get started with cloud development, even if you need to move to other services in the future for further capabilities (compare hosting options). As always, let us know if you run into any issues, or have any questions below or via Twitter.