Guest Opinion

A Vote for Transparency

Roger weighs in on the reasons behind the controversy surrounding Entity Framework.

Microsoft's traditional design process for Visual Studio has been tailored to a few beta releases, usually followed by a release candidate or two. VS 2008 added community technology previews (CTPs). CTPs are incremental technical releases between betas, which the SQL Server Group pioneered for SQL Server 2005, code-named "Yukon."

There was little or no opportunity for most VS and .NET users to participate in the design phase of .NET 3.0 and 3.5 or VS 2008 by suggesting new or improved features. Instead, betas and CTPs arrived with new or enhanced capabilities cast in concrete and offered for testing only. Recommendations for feature additions or modifications were met in Microsoft Connect posts with off-putting lines such as: "Your suggestion will be considered for a future version."

About a year ago, Pablo Castro, architect for the ADO.NET Data Services team, introduced the concept of "transparency in the design process" for Project "Astoria" in a July 20, 2007, blog post. The primary objective of transparent design, according to Castro, is to enable developers "to follow the design topics as we discuss them, and have the opportunity to provide feedback right during the time where we are actively discussing a certain aspect and haven't made a decision yet." Castro explained that the team would make its design process visible through blog posts, including "meeting notes from our design meetings." For the most part, the team followed its transparency mandate to interested parties' satisfaction, and Astoria will release to manufacturing with high marks for the design of a version 1 product.

Entity Framework (EF) version 1's design process followed the traditional pattern; its team developed the EF and Entity Data Model (EDM) architecture without early input from independent object/relational mapping (O/RM) tool users. This resulted in an initial confrontation at the March 2007 MVP Global Summit in Seattle with several high-visibility MVPs, who were proponents of the NHibernate O/RM tool. The primary issue was disregarding domain-driven design, test-driven development, and "persistence ignorance" principles. Despite the added development time contributed by moving EF v1's delivery vehicle from VS 2008 to Service Pack 1, EF v1 didn't overcome any of the alleged design deficiencies pointed out previously.

Program Manager Tim Mallalieu announced a transparent design exercise for ADO.NET EF v2 on June 23, 2008, along with a list of its high-priority features for v2, which included most of the MVPs' desires, and a copy-and-paste version of Castro's blog post. (This was Mallalieu's first post after taking over EF's project management in fall 2007.) An earlier post by the team's primary spokesperson, Daniel Simmons, announced the appointment of domain-architecture mavens Eric Evans, Stephen Forte, Martin Fowler, Pavel Hruby, and Jimmy Nilsson to a DP Advisory Council. EF Community Program Manager Elisa Flasko says that minutes of council meetings will be published in the EF Design blog.

On the same date as Mallalieu's post, an "ADO.NET Entity Framework Vote of No-Confidence" manifesto appeared on the Web citing a similar, but not identical, list of alleged deficiencies. It quickly garnered more than 400 signatories, was the subject of widespread commentary by .NET bloggers, and tarnished EF's credentials among VS developers. Mallalieu's reasoned reply the next day on his personal blog addressed most of the manifesto's points, but didn't calm the controversy. If the EF team had started its design process as a transparent design exercise, it probably would've assigned more resources to the issues initially raised by the MVPs, and corrected most -- if not all -- of the deficiencies.

SQL Server Data Services (SSDS) is in the early design stages now, and its team is holding the design cards for pre-release improvements close to its collective chest. It would behoove the SSDS team to take full advantage of its EF counterparts' experiences and commit to an equally transparent design exercise.

About the Author

Roger Jennings is an independent XML Web services and database developer and writer. His latest books include "Special Edition Using Microsoft Office Access 2007" (QUE Books, 2007) and "Expert One-on-One Visual Basic 2005 Database Programming" (WROX/Wiley, 2005). He’s also a VSM contributing editor and online columnist and manages the OakLeaf Systems blog. Jennings’ Code of Federal Regulations Web services won Microsoft’s 2002 .NET Best Horizontal Solution Award. Reach him at

comments powered by Disqus


  • How to Do Naive Bayes with Numeric Data Using C#

    Dr. James McCaffrey of Microsoft Research uses a full code sample and screenshots to demonstrate how to create a naive Bayes classification system when the predictor values are numeric, using the C# language without any special code libraries.

  • Vortex

    Open Source 'Infrastructure-as-Code' SDK Adds .NET Core Support for Working with Azure

    Pulumi, known for its "Infrastructure-as-Code" cloud development tooling, has added support for .NET Core, letting .NET-centric developers use C#, F# and VB.NET to create, deploy, and manage Azure infrastructure.

  • .NET Framework Not Forgotten: Repair Tool Updated

    Even though Microsoft's development focus has shifted to the open-source, cross-platform .NET Core initiative -- with the aging, traditional, Windows-only .NET Framework relegated primarily to fixes and maintenance such as quality and reliability improvements -- the latter is still getting some other attention, as exemplified in a repair tool update.

  • How to Work with C# Vectors and Matrices for Machine Learning

    Here's a hands-on tutorial from bona-fide data scientist Dr. James McCaffrey of Microsoft Research to get you up to speed with machine learning development using C#, complete with code listings and graphics.

  • Sign

    Working with Claims to Authorize Users in ASP.NET Core and Blazor

    When you need to integrate authorizing the user to perform some activity (or just want to retrieve information about the current user), you need to work with the ClaimsPrincipal’s Claims objects. Here’s everything you might want to do.

.NET Insight

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.

Upcoming Events