Entity Framework - Introduction (Part 2 of 3)
(Part 1)(Part 3)
Part 2 Model First
In part one we looked at creating a database fist project and generated a model from our pre-existing database, in part 2 we are going to build a model first and then create the database from the model. To begin this part of the tutorial we'll create a new class library project.
Create a new Visual Studio Class Library Project
Once the new project has been created, right click on the project name and select Add | New Item
Under C# Select Data | ADO.NET Entity Data Model
Select Empty Model and Finish
Building the Model
Next we'll add some entity objects on the design surface and start building our model. Entity objects can be created either by dragging and dropping items from the toolbox to the design surface or right clicking on the design surface and selecting Add | New Item.
Add From Toolbox
Add from Designer Surface
First I'll add a new Entity and call it Movie, notice that by default a new ID property is created with an int32 type and set to an identity.
Next, I'll add two more scalar properties to the Movie entity, title and date.
Note: The default for a new scalar property is string and non-nullable. Note: the max length attribute of our scalar property will be used when the database is created for the max length of the column.
Change the type of the date property to DateTime
The next Entity will be called Genre, create one scalar property in the Genre called Category with a default type of string. The last Entity I'll create will be called Actor, I'll create one new scalar property called Name with a default type of string.
The Entity diagram should now look something like this
Create the Entity Relationships (Associations)
Right click on Movie and Select Add | Association
Ensure that Movie and Actor are selected in the dropdown boxes, Change the Multiplicity to Many to Many, this is because there can be many actors in a movie and actors can be in many movies. The new association will create 2 new navigation properties, Actors and Movies.
The Design Diagram has been updated showing the new association, many movies to many actors
Next create another association for Movie to Genre, this association will be many to one because movie can only have 1 genre but genre can be associated with many movies.
Generate the Database from the Model
Next we're going to create our SQL database from our model design.
Note: The database that we are going to create needs to already exist on the SQL Server, just a shell of a database that we can point to. The command to Generate the database from the model actually just generates the schema in the existing database.
Create a new database on the SQL server called MovieLibrary
Before we generate the database from the model, let's take a look at the metadata that describes the database and metadata that describes the mapping between the model and the database.
To view the metadata, right click on the ModelFirst.edmx file in the Visual Studio Solution Explorer and select Open With | XML
There are two highlighted sections in the XML file, the first is the storage schema that describes the database and the second is the mapping layer, these sections are currently empty because we have not generated the database from the model yet.
Next go back to the Designer view of the model and right click on the design surface and select Generate Database From Model.
Create a new connection to the SQL server, select the new MovieLibrary database.
Select Finish and the SQL file will be created that can be run against the SQL Server.
Right click anywhere in the file and select Execute. You'll be prompted from the SQL Server to enter credentials. After credentials have been entered you should get a message in the T-SQL window saying the Command Completed Successfully.
Take a look inside the database and see if the tables created in the model are now in the database.
This completes part 2 of the Entity Framework introduction, in part 3 I will discuss using the newly created models to leverage the Entity Framework.
(Part 1)(Part 3)