Thursday, April 19, 2012

Entity Framework - An Overview

In previous post we briefly touched upon entity framework. Today, we will start a multi-part series on Entity Framework. In this series we will start with an overview about entity framework, then walk through creating a sample project using entity framework. We will then move on to using LINQ and Lambda Expressions.

Consider a Sales Order System with your standard normalized database. Your database schema will look something like this...

While this is a simple subset of a normalized database, imagine if you want to know which sales person sold most number of items and to which customer? You will have to write SQL query similar to this...

SELECT C.FirstName,C.LastName,Count(O.OrderID)As TotalOrders,S.FirstName,S.LastName
FROM Customers C INNER JOIN Orders O ON C.CustomerID=O.CustomerID
INNER JOIN SalesPerson S ON O.SalesPersonID=S.SalesPersonID
Group By C.FirstName,C.LastName,S.FirstName,S.LastName

This is fairly complex query for what you want to accomplish. Add the order dates or the total items per order and you can imagine how complex it will get. What if we create a view that groups this information together and you can then write a query against this view.

Although views are logical abstractions and can abstract many of the data mapping complexities, views are limited in what they can do. Further, if your database is being used for multiple applications, you may be creating multiple views and database management may become an arduous task.

Entity framework allows for abstracting the data mapping to create logical schema commonly called entity data mapping (EDM). Entities also allow for inheritance and hierarchy, giving you object relationship hierarchy as well as abstracting some of the complexities. The underlying relationships between the tables and attributes are managed in XML files, but you don't have to know the intricate details of the XML layout and schema. The logical objects will have to be mapped to the actual tables in the database obviously, but a developer doesn't have to worry about these details; framework takes care of the mappings between the logical abstraction layer and the underlying database. As far a business logic is concerned, it works with the entity data model as opposed to the database.

Entity Framework also provides facility to insert and update data without having to write an insert and update SQL queries. Further, the data is persisted in memory and any changes are tracked to ensure only changed records are updated.

Since most developers are familiar with SQL scripts, entity framework provides a very similar language to SQL that allows you to work with the EDM just as you would with database tables.

For example, if you created an EDM that wraps all the information that you need (as defined in the above query) in one object called "SalesOrderHistory" you can run a query against this object in the following fashion...

SELECT SO.CustomerName,SO.SalesPerson,Count(SO.OrderID) FROM
SalesOrderHistory AS SO Group By SO.CustomerName, SO.SalesPerson

This is very similar to SQL, but you must use alias for the entity names.

In subsequent posts we will dig deeper in this topic and see an example in action, so be sure to check back soon.

Thank you.

No comments:

Post a Comment