This is the first part of the solution to the final challenge of this course, Papa Bob's Mega Challenge. Because this challenge is the longest and most detailed, the solution will be broken up into multiple documents that each deal with an appropriate portion of the solution. This challenge requires the use of almost every concept covered throughout this course, so if in trying to solve it, you reached a point that you couldn't get past, this solution is here to guide you. As always, find the section pertaining to the issue you need help with and only use as much of it as you need.
The purpose of this challenge is to create a new website for Papa Bob's, a fictitious company used in a previous challenge. One of the main requirements is to use a maintenance-driven approach to the website. This entails breaking the solution into layers of projects: Presentation, Domain and Persistence, as well as using Data Transfer Objects to pass data through the layers.
To begin creating this structure, create a new Solution in Visual Studio by selecting: New Project > Other Project Types > Visual Studio Solution. Select 'Blank Solution' and name it PapaBobs:
Once the Solution has loaded, right-click on the Solution in the Solution Explorer and add a new ASP.NET Web Project. Call this project 'PapaBobs.Web.' This will act as our Presentation layer:
Next, we need to add our Domain and Persistence layers to the Solution. To do this, add two more Projects, this time selecting 'Class Library' as their type. Name them 'PapaBobs.Domain' and 'PapaBobs.Persistence':
Finally, create a Class Library for the Data Transfer Object following the same steps described for the Domain and Persistence layers. Call it 'PapaBobs.DTO'.
Now that all our initial Projects are in place, let's begin by creating our dependencies. While not ideal, we'll use the same method as described in the lessons covering this maintenance-driven approach, where all dependencies point 'downward'. This means that the Presentation will have a reference for the Domain and the Domain for the Persistence. All three layers will depend on the DTO.
To add these references, right click on the 'References' section under each project, select 'Add Reference' and select the appropriate references.
Note: The DTO class does not contain any references, as it never makes a call into the other projects.
Next, we'll rename the classes from the different layers according to their purpose. Because the Domain layer orchestrates method calls and manages the interaction between the other two layers, rename its Class1 to 'OrderManager'. The Persistence layer will be named 'OrderRepository' as it holds the data, and the DTO's class should be called 'OrderDTO':
Now that our classes are in place, we can create the database that will store the information for the order, including the customer's information. To do this, right-click on 'PapaBobs.Web' and select: Add > New Item From the resulting dialog, select a SQL Server Database from the Data category and name it 'PapaBobsDb.mdf':
You may receive a prompt at this point asking if you'd like to place the Database in the App_Data folder of your project. Confirm that you would, and your database should be visible in your Project:
Navigate from the Solution Explorer to the Server Explorer to select the database from the Data Connections category:
Right-click on the Tables folder and add a new table to the database. This table will store the information of each pizza order that comes in. Fill in the following information in the table to capture that data:
Note that the bit data type is employed for the different topping options because it is equivalent to a boolean value; either 0 or 1 for true or false. Because all the toppings need to have a value, regardless of if they are chosen or not, a boolean representative is ideal for the situation. In this case, they are defaulted to false.
In the 'T-SQL' section underneath the Design view of the table, change the name of the table to 'dbo.Orders':
Finally, click on the 'Update' button on the top left-hand side of the table to commit these changes. In the resulting dialog, confirm that you'd like to update the table.
For the final step in this part of the solution, we'll create an Entity Model for PapaBobsDb within the Persistence layer. Right-click on PapaBobs.Persistence and add a new item. Located under the Data category, select 'ADO.NET Entity Data Model' and call it 'PapaBobsEntities':
From the Wizard that displays at this point, choose the 'EF Designer from database' option and click Next. In the next section, confirm that the data connection for the Model is PapaBobsDb.mdf. Leave the name as the default and click Next:
After you click next, a popup dialog should appear asking if you'd like to copy the file into your project. Make sure to select 'No' to this step:
In the next window, you'll be asked which version of the Entity Framework you'd like to use. Select 6.x and click Next:
Finally, you'll be asked which databases to include in your model. Check 'Tables' and make sure that the Orders table is selected, then confirm your selection:
At this point, you'll be redirected to a diagram of your Order Entity, automatically populated with the properties of your Orders table:
This concludes this part of the solution for Papa Bob's Mega Challenge. In the next part, we'll create an Order button for the Default page, and add a sample order to the database.
Papa Bob's Mega Solution Part 1 - Setting up the Solution