Introduction
In this article I provide some exciting and useful features of Entity Framework 6 beta release. Currently EF 6's beta release is available. The Beta release can be downloaded from NuGet. These features will be really useful and when the final release is available you will really find them useful and more powerful than the previous versions. So without wasting time I will proceed to discussing some key features.
- Asynchronous pattern Support The
.NET Framework 4.5 introduced the Task-Based Asynchronous Pattern that
uses the async modifier and the await operator to provide asynchronous
programming. This feature is now supported by EF6. So database calls
that fetch a large amount of data, made through EF can be processed
asynchronously. By using the asynchronous pattern we can avoid blocking
the responsiveness of our application.
Let's have at look some code snippets without and with the asynchronous pattern and how to use this pattern with EF6.
a. Without Asynchronous Patterns
privatestatic void SaveInput(string question,string answer){using (var ctx = new AnswersContext()){ctx.Questions.Add(new Question(){Content = question,Answers =new List<Answer> { new Answer { Content = answer } }});ctx.SaveChanges();}}
b. With Asynchronous Patternsprivatestatic void PrintQuestions(){using (var ctx = new AnswersContext()){foreach (var q in ctx.Questions){Console.WriteLine(q.Content);foreach (var a in q.Answers){Console.WriteLine(" -" + a.Content);}}}}
As you can see, I have used async and await, two new keywords. If we are using the await operator then it is necessary to use async with the method signature. Since we are calling the ToListAsync method, as soon as this method is called, the thread won't block until the task finishes.
- Custom ConventionsWhen
we use the code first approach in Entity Framework, classes are mapped
with the database using a set of conventions that are defined in EF,
such as which property becomes the primary key, which name of in the
table maps with an entity name etcetera. We must use some custom code
conventions for that. Sometimes these default conventions are not
perfect for our model and we must do configuration using Data annotation
and other ways.
- Code First Mapping to Insert/Update/Delete Stored Procedures When
we use code first entities, it is easy to select data using Stored
Procedures but there was no way to delete, update and insert data using
Stored Procedures.
EF 6 provides this ability to insert, update and delete using a Stored Procedure. So you can do that as in the following:
mBuilder .Entity<Users>() .MapToStoredProcedures(s => {s.Update(u => u.HasName("modify_User"));s.Delete(d => d.HasName("delete_User"));s.Insert(i => i.HasName("insert_User"));});
- Connection ResiliencySince
we know that currently most database servers are a cloud, such as an
Azure Database. So the chances of connection failures are greater. This
could be because of some defensive techniques used by the cloud database
because of how the cloud database maintains its consistency, so to
maintain that, sometimes it closes the connection explicitly.
EF 6 provides many ways to retry actions to be performed on the database and to minimize the number of failures and the effect of defensive code. Even users can create their own retry strategies and decide which action should be performed if an exception occurs.
- Better supports of POCO entitiesNow
we can make nesting of entities and complex types inside classes. We
can also have Custom Equal and GetHashCode Method implementations.
- Multiple Context Per DatabaseIn
EF 5, when we use Migration or a Code first database created
automatically then we can have only one code first model per database.
But In EF 6 , we will be able to have multiple code first models per
database.
- Default Isolation levelDefault
isolation level has been changed for databases created using code first
in EF6. In EF 5 it was Serializable so now it has been changed to
READ_COMMITTED_SNAPSHOT. So because of this isolation level the database
becomes more scalable and there are very few chances of deadlock.
- Supports Enum and Spatial data types :EF 6 now provides support of Enum and Spatial Data Types.
- Now easy to set default schema at one placeEF 6 provides the DbModelBuilder.HasDefaultSchema Code first API that allows configuration of a default database schema for the code fist model in one place. Previously this default schema was hard-coded to dbo and if we needed to change it , we needed to do a lot of work.
Summary
In this article I have discussed some key features that have been introduced in the Beta release of Entity Framework 6 . There are many other features also introduced in EF 6. For more information you can refer to the following Codeplex website.
No comments:
Post a Comment