We'll start with a simple model class that intentionally
uses a few different data types:

It's important that we annotate a property as being a [Key]
in order for the scaffolding to work properly. We can also specify many other
metadata properties using attributes from the
System.ComponentModel.DataAnnotations namespace, but for now we'll stick with
just the [Key].
Now that we have this class, the next step is to add a
Controller for this class by right-clicking on the Controllers folder in
Solution Explorer:

Fill in the resulting window with the name of the model
class, the template to use (I'm using the default Entity Framework read/write
template), and the data context class. Since I'm starting from a brand new
project, I don't have a data context class yet, so I selected <New data
context> from the list of options, and named the class BookContext.

Once you click Add, you should see a number of new items
added to your project:

More interestingly, if you simply run your web application
at this point and navigate to /book, you will see that you now have a working
Controller and View for managing a collection of books:

Click Create New, fill in the form, and you'll see you now
have full CRUD-L (Create, Read, Update, Delete -- and List) access to your
model class.
Note that the display name for PublicationDate isn't
necessarily how the user would expect. We can fix that with some annotations
on the Create/Edit views, though on the Index view for now I'm just fixing it
manually. Adding the attribute [Display] to the property allows us to specify
a Name to show:

This is what's used by the views that use Html.LabelFor(),
like this line in the Edit.cshtml View:

Note that if you change your model, you're likely to get an
error regarding the database being out of sync with your model. Looking at the
generated code for the BookContext, we see this comment which has the line of
code needed to fix this issue, assuming you are ok with deleting your database
on every application start!

Once this is added to Global.asax:

The error disappears and we're able to continue working on
our model, its annotations, and the look and feel of our scaffolded CRUD views
and controllers.