Skip to main content

Entity Framework benefits and liabilities compare to NHibernate

Entity Framework is one of the most popular ORM framework on the .NET world, it enables to work with relational data using domain-specific objects and eliminates the need for most of the data-access code. EF 1 came out with .NET 3.5, EF 5 released targeting .NET Framework 4.5 and is now on EF 6 alpha3. For Entity Framework, the ObjectContext or DbContext holds the configuration, model and acts as the Unit of Work, holding references to all of the known entity instances.

Below are few of the Entity Framework benefits and liabilities compare to NHibernate:

Benefits:
  • Entity Framework and NHibernate both default to change tracking at the unit of work level, also offers self-tracking entities.
  • Entity Framework of has close integration ties with Visual Studio and various ASP.NET and WCF libraries.
  • Entity Framework has a great LINQ support
  • Entity Framework is superior on documentation and NHibernate lacks and need to synchronize with an up to date API reference with its current version.

Liabilities:
  • Entity Framework follows a more traditional .NET design where everything is encapsulated in a single ObjectContext or DbContext. This makes using the object far more straight forward, but the  downside is that the class is therefore not lightweight compare to NHibernate
  • Entity Framework does not have any built-in support for second-level caching, but there are samples for adding second-level caching.
  • Entity Framework only has two event-based extension points: ObjectMaterialized and SavingChanges. NHibernate has a very rich event model.
  • EF and NHibernate supports cascading for collections and associations: when an entity is deleted, their conceptual children are also deleted. NHibernate also offers the possibility to set the foreign key column on children to NULL instead of removing them.
  • EF is yet to provide 100% support for batching.
  • Out of the box, Entity Framework only supports SQL Server, but providers exist to support other databases both free and commercial.

Additional links to refer:

Popular posts from this blog

Error : Task Scheduler - This task requires that the user account specified has Log on as batch job rights

In one of the production environment, we were running with low disk space problem because of the logs. To cleanup the old logs created a  task within the scheduler and have specified "Run whether use is logged on or not". The user account we used was the system logged on user. The task was running fine, after few months as a security policy the password expired. Since the old password expired we had to apply the new password for the task also, but this time we decided to create a new account specifically for the task scheduler with password never expire option. While setting up the new user account and password, run into the below issue: "The task required that the user account specified has log on as batch job rights" To fix the issue follow below steps: From Run type "secpol.msc /s" and enter, the local security policy snap in will open. Select "Local Policies" in MSC snap in Select "User Rights Assignment" Righ...

ISAPI & CGI Restriction configuration missing in IIS

In windows 7 by default ISAPI & CGI Restrictions are not configured. To enable ISAPI & CGI restrictions, GoTo -> Control Panel -> Programs -> Click on "Windows features on or off -> Expand Internet Information Services - >Expand World Wide Web Services ->Select CGI and ISAPI extensions and Click OK. After enabling, Check in IIS, Open your IIS and the feature will be available. What is ISAPI and CGI restrictions : ISAPI and CGI restrictions are request handlers that allow dynamic content to execute on a server. These restrictions are either CGI files (.exe) or ISAPI extensions (.dll). You can add custom ISAPI or CGI restrictions if the IIS configuration system allows this.

Implementing Parallelism With A SearchResultCollection

Implementing Parallel.ForEach with a SearchResultCollection: The below piece of code helps to check the given user is a part of the given active directory group. To implement Parallel.ForEach with a SearchResultCollection, do the casting with the SearchResult object and covert it into a list. //// Directory Searcher var directorySearcher = new DirectorySearcher(string.Format("(CN={0})", groupName)); //// Find group var searchResultCollection = directorySearcher.FindAll().Cast ().ToList(); Parallel.ForEach(searchResultCollection, searchResult => {  // enumerate members  var resultPropColl = searchResult.Properties;  Parallel.ForEach(resultPropColl["member"].Cast ().ToList(), member =>  {    var memberEntry = new DirectoryEntry("LDAP://" + member);    var userProperties = memberEntry.Properties;    if (GetUserNameFromProperties(userProperties, "sAMAccountName") == userName)    {      return true; ...