--- uid: mvc/overview/getting-started/introduction/adding-a-new-field title: "Adding a New Field | Microsoft Docs" author: Rick-Anderson description: "" ms.author: riande ms.date: 10/17/2013 ms.assetid: 4085de68-d243-4378-8a64-86236ea8d2da msc.legacyurl: /mvc/overview/getting-started/introduction/adding-a-new-field msc.type: authoredcontent --- Adding a New Field ==================== by [Rick Anderson]((https://twitter.com/RickAndMSFT)) [!INCLUDE [Tutorial Note](sample/code-location.md)] In this section you'll use Entity Framework Code First Migrations to migrate some changes to the model classes so the change is applied to the database. By default, when you use Entity Framework Code First to automatically create a database, as you did earlier in this tutorial, Code First adds a table to the database to help track whether the schema of the database is in sync with the model classes it was generated from. If they aren't in sync, the Entity Framework throws an error. This makes it easier to track down issues at development time that you might otherwise only find (by obscure errors) at run time. ## Setting up Code First Migrations for Model Changes Navigate to Solution Explorer. Right click on the *Movies.mdf* file and select **Delete** to remove the movies database. If you don't see the *Movies.mdf* file, click on the **Show All Files** icon shown below in the red outline. ![](adding-a-new-field/_static/image1.png) Build the application to make sure there are no errors. From the **Tools** menu, click **NuGet Package Manager** and then **Package Manager Console**. ![Add Pack Man](adding-a-new-field/_static/image2.png) In the **Package Manager Console** window at the `PM>` prompt enter Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDBContext ![](adding-a-new-field/_static/image3.png) The **Enable-Migrations** command (shown above) creates a *Configuration.cs* file in a new *Migrations* folder. ![](adding-a-new-field/_static/image4.png) Visual Studio opens the *Configuration.cs* file. Replace the `Seed` method in the *Configuration.cs* file with the following code: [!code-csharp[Main](adding-a-new-field/samples/sample1.cs)] Hover over the red squiggly line under `Movie` and click `Show Potential Fixes` and then click **using** **MvcMovie.Models;** ![](adding-a-new-field/_static/image5.png) Doing so adds the following using statement: [!code-csharp[Main](adding-a-new-field/samples/sample2.cs)] > [!NOTE] > > Code First Migrations calls the `Seed` method after every migration (that is, calling **update-database** in the Package Manager Console), and this method updates rows that have already been inserted, or inserts them if they don't exist yet. > > The [AddOrUpdate](https://msdn.microsoft.com/library/system.data.entity.migrations.idbsetextensions.addorupdate(v=vs.103).aspx) method in the following code performs an "upsert" operation: > > [!code-csharp[Main](adding-a-new-field/samples/sample3.cs)] > > Because the [Seed](https://msdn.microsoft.com/library/hh829453(v=vs.103).aspx) method runs with every migration, you can't just insert data, because the rows you are trying to add will already be there after the first migration that creates the database. The "[upsert](http://en.wikipedia.org/wiki/Upsert)" operation prevents errors that would happen if you try to insert a row that already exists, but it overrides any changes to data that you may have made while testing the application. With test data in some tables you might not want that to happen: in some cases when you change data while testing you want your changes to remain after database updates. In that case you want to do a conditional insert operation: insert a row only if it doesn't already exist. > > The first parameter passed to the [AddOrUpdate](https://msdn.microsoft.com/library/system.data.entity.migrations.idbsetextensions.addorupdate(v=vs.103).aspx) method specifies the property to use to check if a row already exists. For the test movie data that you are providing, the `Title` property can be used for this purpose since each title in the list is unique: > > [!code-csharp[Main](adding-a-new-field/samples/sample4.cs)] > > This code assumes that titles are unique. If you manually add a duplicate title, you'll get the following exception the next time you perform a migration. > > *Sequence contains more than one element* > > For more information about the [AddOrUpdate](https://msdn.microsoft.com/library/system.data.entity.migrations.idbsetextensions.addorupdate(v=vs.103).aspx) method, see [Take care with EF 4.3 AddOrUpdate Method](http://thedatafarm.com/blog/data-access/take-care-with-ef-4-3-addorupdate-method/).. **Press CTRL-SHIFT-B to build the project.**(The following steps will fail if you don't build at this point.) The next step is to create a `DbMigration` class for the initial migration. This migration creates a new database, that's why you deleted the *movie.mdf* file in a previous step. In the **Package Manager Console** window, enter the command `add-migration Initial` to create the initial migration. The name "Initial" is arbitrary and is used to name the migration file created. ![](adding-a-new-field/_static/image6.png) Code First Migrations creates another class file in the *Migrations* folder (with the name *{DateStamp}\_Initial.cs* ), and this class contains code that creates the database schema. The migration filename is pre-fixed with a timestamp to help with ordering. Examine the *{DateStamp}\_Initial.cs* file, it contains the instructions to create the `Movies` table for the Movie DB. When you update the database in the instructions below, this *{DateStamp}\_Initial.cs* file will run and create the DB schema. Then the **Seed** method will run to populate the DB with test data. In the **Package Manager Console**, enter the command `update-database` to create the database and run the `Seed` method. ![](adding-a-new-field/_static/image7.png) If you get an error that indicates a table already exists and can't be created, it is probably because you ran the application after you deleted the database and before you executed `update-database`. In that case, delete the *Movies.mdf* file again and retry the `update-database` command. If you still get an error, delete the migrations folder and contents then start with the instructions at the top of this page (that is delete the *Movies.mdf* file then proceed to Enable-Migrations). If you still get an eror, open SQL Server Object Explorer and remove the database from the list. Run the application and navigate to the */Movies* URL. The seed data is displayed. ![](adding-a-new-field/_static/image8.png) ## Adding a Rating Property to the Movie Model Start by adding a new `Rating` property to the existing `Movie` class. Open the *Models\Movie.cs* file and add the `Rating` property like this one: [!code-csharp[Main](adding-a-new-field/samples/sample5.cs)] The complete `Movie` class now looks like the following code: [!code-csharp[Main](adding-a-new-field/samples/sample6.cs?highlight=12)] Build the application (Ctrl+Shift+B). Because you've added a new field to the `Movie` class, you also need to update the binding *white list* so this new property will be included. Update the `bind` attribute for `Create` and `Edit` action methods to include the `Rating` property: [!code-csharp[Main](adding-a-new-field/samples/sample7.cs?highlight=1)] You also need to update the view templates in order to display, create and edit the new `Rating` property in the browser view. Open the *\Views\Movies\Index.cshtml* file and add a `