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 system architect and principal in PH&V Information Services. PH&V provides full-stack consulting from UX design through object modeling to database design. Peter tweets about his VSM columns with the hashtag #vogelarticles. His blog posts on user experience design can be found at http://blog.learningtree.com/tag/ui/.

comments powered by Disqus

Featured

  • Creating Reactive Applications in .NET

    In modern applications, data is being retrieved in asynchronous, real-time streams, as traditional pull requests where the clients asks for data from the server are becoming a thing of the past.

  • AI for GitHub Collaboration? Maybe Not So Much

    No doubt GitHub Copilot has been a boon for developers, but AI might not be the best tool for collaboration, according to developers weighing in on a recent social media post from the GitHub team.

  • Visual Studio 2022 Getting VS Code 'Command Palette' Equivalent

    As any Visual Studio Code user knows, the editor's command palette is a powerful tool for getting things done quickly, without having to navigate through menus and dialogs. Now, we learn how an equivalent is coming for Microsoft's flagship Visual Studio IDE, invoked by the same familiar Ctrl+Shift+P keyboard shortcut.

  • .NET 9 Preview 3: 'I've Been Waiting 9 Years for This API!'

    Microsoft's third preview of .NET 9 sees a lot of minor tweaks and fixes with no earth-shaking new functionality, but little things can be important to individual developers.

  • Data Anomaly Detection Using a Neural Autoencoder with C#

    Dr. James McCaffrey of Microsoft Research tackles the process of examining a set of source data to find data items that are different in some way from the majority of the source items.

Subscribe on YouTube