Practical ASP.NET

Integrating Entity Framework with an ASP.NET Web Site

Peter begins to explore the usability of Dynamic Data and Entity Framework by adding the simplest possible data model to his application.

In this column and in following ones, I'm going to look at integrating Dynamic Data (part of ASP.NET 3.5 SP1) into an existing ASP.NET project. You'll be playing along with me: I don't know if this technology is actually going to turn out to be practical.

And, to be honest, this column -- and potentially the next few -- won't be ASP.NET-specific because I'm going to be poking around in the Entity Framework (EF). If you intend to use Dynamic Data, you need EF because it handles creating the middle-tier objects you need to site between your UI and your relational tables. You can't use LINQ for this because unlike EF, LINQ doesn't support updates.


Defining Entities
The first step in integrating EF with your site is to go to Add New Item on the Website menu and select ADO.NET Entity Data Model. After naming your model and clicking OK, you'll get a dialog giving you a choice between generating your entity model from an existing database or starting with an empty model.

For full control, pick the empty model. (For generating a model from an existing database option, see Roger Jennings' article "Generate Web Sites Automatically" here.) The entity model is added to Solution Explorer as an .EDMX file in Solution Explorer and a new tab (named Model Browser) that gives you a tree view of the model's components.

To create your entity model, you drag an Entity control from the Toolbox onto the design surface of your .EDMX file, give the Entity some properties, map the Entity to a table (or a view or stored procedure), and finish by mapping those properties to columns in the table. For instance, to create an entity that represents the Orders table in the Northwind database, you'd begin by dragging an Entity control onto the design surface.

You'd then add the properties to the Entity to represent data drawn from the database. You get one property free (named Id with a datatype of Int32). To add new properties, just right-click on the Entity's Scalar Properties bar and select Add | Scalar Property. You can name each property and set its data type in the Properties window. For my Orders Entity, I added properties called Address and RequiredDate.

There are some rules: First, do add properties for every primary key field in the table. Second, don't add properties that would represent foreign keys in your table (unless they're part of the table's primary key). Finally, mark those properties that will uniquely identify the entity by right-clicking on the properties and selecting Entity Key from the pop-up menu.

Mapping to Tables
With the entity's properties defined, it's time to map the entity to a table and entity properties to table columns. You must first add to the Entity Model the database tables that you intend to use. The easiest way to do that is to right-click on the design surface and select Update Model from Database.

After selecting a database connection, you'll get a list of all the tables, views and stored procedures in the database. Check off the tables you need. However, those tables are just a means to an end: What you really want to do is map your entity to one or more tables. If you want, you can even delete the tables after adding them (the Entity Model seems to remember all the tables it's ever known).

To start mapping your tables to your entities, click on an Entity and select Table Mapping. This opens a window below the editor window named Mapping Details. You can select the table you want to add to your entity from the drop-down lists in this window. For my Order entity, I chose the Orders table.

The final step in creating the Entity is to map properties in the entity to columns in the tables mapped to the entity. This is also done from the Mapping Details window: Select a column from the table and, from the field's drop-down list, select the Entity property that it maps to. If you've given your properties the same name as the columns they map to, you'll find that those mappings are already done for you. Once you've assigned columns to all of your properties, you have an Entity.

This is obviously a simplistic design. In my next column, I'll sketch the page I'd like to build, extend this model and look at some features and limitations in EF.

About the Author

Peter Vogel is a principal in PH&V Information Services, specializing in ASP.NET development with expertise in SOA, XML, database, and user interface design. His most recent book ("rtfm*") is on writing effective user manuals, and his blog on technical writing can be found at rtfmphvis.blogspot.com.

Reader Comments:

Wed, Sep 2, 2009

"In my next column, I'll sketch the page I'd like to build, extend this model and look at some features and limitations in EF." - No chance of a link then?

Thu, Oct 23, 2008 Peter Vogel Canada

LINQ supports updates: Quite truemapping to a stored procedure would give you updates, as would adding some code to the DataAccessor class by using, for instance, InsertOnSubmit and SubmitChanges. I can see that I may have been too harshthough I would say that updating is a more integrable part of Entity Framework.

Thu, Oct 16, 2008 Igor Melbourne

"You can't use LINQ for this because unlike EF, LINQ doesn't support updates."

Not entirely true - LINQ designer quite well could handle an update Stored Procedure, but it does not perform mapping between data model and set of stored procedure parameters.


Add Your Comments Now:

Your Name:(optional)
Your Email:(optional)
Your Location:(optional)
Comment:
Please type the letters/numbers you see above