VistaDB.Net Logo

Entity Framework support - Be there first, or getting it right?

by Jason Short 2 July 2009

I have been working on this blog post for around six months.  I keep writing and shelving it.  Today I read a blog post from the DexExpress CTO that got me back to wanting to publish this post.

Early Adopters?

To put what Julian said in different terms; Do you want all the Early Adopters for your product?   There are pro and con arguments to having the early adopters when it comes to technology. 

While they tend to be some of the most passionate people out there, and they are usually eager to play with a technology but have little to no loyalty to that technology.  By the time you have stabilized your product cycle they will be long gone on to the next technology buzzword to play with it.

They also tend to have the most harsh reviews of the early technology.  They will bash it as not complete, or not like product x, etc.  But by the time you have addressed their issues they will never come back to update those huge blog rants they did against you in the early days.  Their social media contracts tend to be very one sided – whatever is in it for them today.  After all anyone on the Internet can post a blog slamming a product or technology as inferior.  You don’t need credentials or facts to back you up.  Just post it – people will believe it.  And if the company actually listens to you and implements your suggestions you can always shrug them off as not being “agile” enough for you (IE, they didn’t give you that build the same day you asked for it).

Buzz word and gone

Microsoft is great at playing into this early adopter hype.  They print magazines with all their buzz word laden technologies sometimes years before you or I will be able to put it into production.  And by the time you do get around to wanting to use it in production they have often already abandoned it for another, newer, faster, more buzz word laden system.

Look at Windows Workflow (WF).  Anyone who early adopted it is probably kicking themselves now.  Microsoft has basically punched reset on the entire design.  I really looked at implementing VistaDB serializers for WF.

They can’t remove it from the framework!

And to all the people who use the argument that they can’t remove it from the framework - that is just silly.  LINQ 2 SQL (L2S) is a good example of this.  Microsoft printed tons of material about it, but you weren’t supposed to take it seriously.  It was just until the more serious Entity Framework came along, didn’t you know? 

Well, from the number of articles, books, etc I don’t think anyone understood that argument.  So if you did buy into that technology what about .Net 4?  Well, Microsoft has said that L2S will exist in some capacity, but what does that mean?  To me it means it means you had better be embracing .Net 3.5 SP1 for a very long time. 

If your favorite buzzword technology was implemented in a SP how stable is that to actually deploy?  I know lots of shops that still refuse to deploy .NET 3.5 SP1 because of the problems they had with the “Service Pack” changing how things worked for their applications.

Sync Services

We actually got bit by Sync Services rewrites three times before we stopped.  Is it stable today?  I don’t think so. From what I have read on the renamed and polished Sync Framework (as it is now being called) it is still being tweaked and changed.  There are lots of people pushing for changes for it to support Azure (ahem, aka cloud computing, aka SQL Server in the Cloud, whatever they want to call it today).

Got Entity Framework?

I have gotten a number of emails from users wanting to look at our Entity Framework (EF) provider.  After all didn’t we talk about it late last year?  Yes, and we did implement it.  The entire VistaDB EF provider is complete.  But we will not ship it until we know it performs good enough, and that it will be around for us to support our customers.

Ship it!

So why not ship it?  Why not give it to all those people who want it?  Why not ride that Early Adopter wave? 

Basically, because I won’t do that to you.  I actually care about the technologies and interfaces we unleash on customers.  I want to ensure whatever technology we present publicly as an interface is stable and not going to go away on you without warning. 

We have been making lots of changes in the engine to support patterns that are particular only to the EF provider.  They are not complete, and may not be by the time we release 4.0.  There are just a lot of strange behaviors in the way it works because it is LINQ based – not relational based.  We want to ensure that the majority of the common patterns are handled with decent performance, and then continue to improve the engine over the lifetime of 4.x.

What type of mismatch?

All ORMs exhibit a mismatch when they are mapped onto relational data.  It is known as the Relational Impedance Mismatch and all ORMs have it to some extent.

An example of the problem in real world terms:  If you have a group of objects you might like to foreach() over them to do something. With Entity Framework that might result in thousands of round trips to your database to answer each of those foreach iterations with one single query.  You are much better off to work on a result set and pair things using set operators.   EF is supposed to provide for this scenario through DataSets, but it is actually highly dependent on what code the programmer actually wrote.  If the programmer does not understand what the framework is going to generate they can beat the crap out of database connections.

We have found some common CLR coding patterns that translate horribly to EF generated database calls.  We have to address these issues before we ship something.

Support and Documentation Problems

Another problem with EF is the documentation.  We are an ADO.NET compliant database engine.  That means if you understand ADO.NET patterns and practices you can pick up our engine very easily.  There is no such level of competency with EF.  Everyone will be in a huge learning curve.  Most of the documentation you find for LINQ is around Linq2SQL syntax (which is NOT the same).  And to make it worse that L2S syntax will compile and blow up and runtime in most cases with very bizarre runtime errors.  This would cause a huge support load on us.  I cannot imagine how we would be able to keep up with those types of tickets when most of the issues have nothing to do with us, but the EF framework itself.

So if we ship an EF provider we are in effect having to support the entire EF framework including tools designers and runtime.  That is a REALLY tall order for a small company. 

Entity Framework Stability

So if we are going to have to support it, how stable is it?  In my experience of our online store and related tools it has a ways to go for stable.  I still have to regen our store edml model about once a month because Visual Studio somehow corrupted it or got out of sync.  I also still have the GUI wizard in Visual Studio crash on me regularly.  And this is all when working with SQL Server. 

Who do you think is going to get those tickets if they were working with our EF Provider?  We would, and there is nothing we can do to fix them.

I know of five companies that started using EF last fall for major projects.  Out of those five only one is still using it in any way.  All of them abandoned it for their main DAL, but one was still using it for internal tools and  utilities.  That tells me the framework has a ways to go for widespread adoption.

When will we ship it?

The current plan (and this is of course subject to change) is to start preview builds of 4.0 shortly after we ship 3.6.  VistaDB 3.6 is feature complete at this point.  We are just working on the samples and fine tuning the installer.

Rather than release VistaDB 3.7 we are going to start releasing VistaDB 4 preview builds.  I will post more information on what that means in engine terms later, but our plans are to release a series of preview builds and then ship a stable around the October timeframe. 

There are two things that have to happen for us to ship an EF provider. 

One is that I have to see the .Net 4 EF model and know we are not going to be required to totally rework our existing code.  If we have to rewrite then I will never release the current provider.  It would be a waste of time to ship something that is obsolete almost as soon as it is released. I want to make sure we can support the VistaDB EF Provider for a minimum of 2 years.

The second is the Visual Studio 2010 plugin model specifications.  Right now our current plugins do not work with VS 2010.  If Microsoft is going to leave the current model in place and require us to update the designers then we will have to create a new build for VS 2010. 

Visual Studio Support

We cannot afford to support three versions of Visual Studio (each with it’s own designer) at the same time, so it would mean a drop of VS 2005 support for VistaDB 4.  I don’t want to do that.  I am hoping that Microsoft fixes their current issues, or publishes a way for third parties to not have to build multiple plugins to support different Visual Studio editions. 

I don’t think that Visual Studio 2010 is going to be a runaway adoption from day one.  I find that a lot of companies are just now migrating to Visual Studio 2008, but many are sticking with 2005 and hoping to leapfrog directly to 2010.  But it comes back to that Early Adopter statement above.  Those users who adopt Visual Studio 2010 early are going to be vocal users.

.NET 3.5 SP1 or 4 support?

You can’t build an EF provider without using .Net 3.5 SP1 – it simply didn’t exist before that time.  That means you are dependant on a SP being present.  (WHY, oh WHY didn’t they call it 3.6 since it added so many new features!)  This means we have to ship a .Net 3.5 SP1 assembly to support EF.  Would you do that and commit to that SP for the next 2 years, or wait for .Net 4?

There are a lot of great things in the .Net 4 framework.  We would love to take advantage of them, but you just can’t do that without also maintaining .Net 2 versions at this time.  I do eventually think that .Net 4 will replace the current .Net 2 stable that most people use.  I think a lot of companies are going to jump straight to 4 from 2 when they finally switch their compile targets. And that means the version of Entity Framework in .Net 4 is a very serious factor for us in what to support in VistaDB.

Right now I think we are leaning towards 3.x staying a .NET 2 assembly without Entity Framework Support.  Then stepping up to .NET 3.5 SP1 for VistaDB 4 with EF.  That would mean no Visual Studio 2010 support in the initial releases unless Microsoft changes something.

What are you doing?

What about you? What are you doing with regards to .Net versions and Visual Studio?  Are you going to start shipping 3.5 SP1 tied assemblies?  Or would you rather wait for 4? 

Is your company still shipping 2.0 assemblies today and skipping .NET 3 entirely?

I hope this has provided a little glimpse into how complicated it is for us to decide how and when to ship things.  It is never easy, but the entire .Net 3 product cycle has thrown a lot of our plans into a spin.

Comments

2 July 2009 #

trackback

Entity Framework support - Be there first, or getting it right?

You've been kicked (a good thing) - Trackback from DotNetKicks.com

DotNetKicks.com

3 July 2009 #

Kendall Miller

We're firmly using 2.0 SP1 for everything we publish publicly.  Internally we do target 3.5 for tools, and because of ASP MVC our web site targets 3.5 SP1.  That said, if it wasn't for the fact they are all supersets of the same framework we wouldn't be risking it and we'd probably be sticking just with 2.0.  

LINQ to objects is very useful and we've had good success with that because it preserves compile time binding between layers, but after some early efforts we dropped LINQ to SQL because it doesn't allow DB changes to propagate to a designer environment you've already changed (you have to just regenerate it).  In the end, we've found that the best results are the same as we were getting in VB6 - from the tables we autogenerate out a few layers and that ensures we can bridge the compile gap.

Unless you have a lot of resources - both credibility and money - chasing the latest technology fad is very risky business.  Particularly in the business of making databases where reliability is a pre-requisite.

Kendall Miller United States

3 July 2009 #

js_vistadb

That is a point I missed in the article.  Most of the early adopters either do not have companies, or do have products.  They typically are consultants who want to play with the latest and greatest and will not have to worry about supporting it 6 months from now, let alone 2 years from now.

js_vistadb United States

3 July 2009 #

Ben

I am using .NET 2.0 right now (with VS2008). Although, I have used 3.5 for websites because of the AJAX integration. I will probably hop to .NET 4.0 3-6 months after it is released (and VS2010) to make sure there are no major issues that people experience.

I like your idea of staying with .NET 2.0 for the 3.x line, but would prefer to see you use .NET 4 for VistaDB 4.0. Even if it meant delaying the release. I think that because I agree that .NET 4.0 will replace .NET 2.0. Also, if you switched to .NET 4 on a 4.x build support would need to know if it is VistaDB 4 for .NET 3.5 or VistaDB 4 for .NET 4.

I also don't think I would use a VistaDB build for .NET 3.5. I would use the .NET 2.0 version and wait for VistaDB for .NET 4.0. Think of the marketing you could have, too; "VistaDB 4.0 and .NET 4.0: It's like powering your application with two finely tuned 427 hemis." Well, that's not very good, but you can see where I am going with that.

Ben United States

3 July 2009 #

Christoph Braendle

Jason

You should not compare devExpress with VistaDB, at least I hope.
I had to switch from devExpress to telerik, because they work harder
and communicate much better.

A real man would say, sorry we are late,
but we will put every effort needed to be in place again,
but this philosophy crashing is pure excuse. Everyone has those problems,
so talking about difficulties is not helpful if others manage those.

Regards,
Christoph

Christoph Braendle Switzerland

3 July 2009 #

Muhammad Mosa

I would love to put my hands on the beta. I can plug it in KiGG http://kigg.codeplex.com and see how it will work.
You can also do that yourself by downloading the source code, update the SSDL and change connection string in web.config and test it.
Please contact me if you would like me to give it a hit on beta.

Muhammad Mosa Egypt

3 July 2009 #

js_vistadb

@Christoph, I never compared us to DevExpress.  I said I read his blog and it reminded me of this post that I had never published.  Not the same thing.

@Muhammad - Once we get the beta out there I will let you know.

@Ben - thanks for your  feedback.  I hadn't thought of the VistaDB 4 with .Net 4 marketing angle!

@Kendall - You hit the nail on the head.  It takes a lot of money and resources to chase technology.  But it is so different as an API vendor when customers are demanding things for valid business reasons.  But we have to tell people no sometimes because it would not be economically viable to support the feature.

Thanks everyone who posted comments.

Not everyone has the same problems.  GUI components have 1 model for drawing on Winforms, and a second for drawing in WPF (which is why DevExpress waited for WPF, they had to rework tools for that runtime).

We currently have 3 models from Microsoft, 3 versions of Visual Studio each with different capabilities and wizard requirements, and 3 versions of .Net (.Net 2 SP1, CF 2, .Net 3.5 SP1).  We are REQUIRED by Microsoft to use specific runtimes in specific models (Entity Framework being one of them).  

Add to that the fact that if your WPF app designer crashes you are probably not going to call DevExpress, you would probably blame Microsoft.  If your EF model tool crashes you will be calling us since we are the database.  UI tool vendors do not have to deal with Microsoft bugs leading to support issues on them at the same level we do (that I am aware of anyway, maybe the grass is just greener on the other side).

Also the price model is totally different.  Most UI tools are $1,000+ per developer.  3 developers = $3,000.  And a single UI tool does not have to generate versions for specific .Net runtimes or Visual Studio editions. The .Net UI Component model has not changed since 2 was released.  We have to maintain more tests, more tools, and more code because of the provider model changes from Microsoft and .net runtime differences.  

I guess I also hold databases to a higher standard than UI tools.  If your UI crashes you can usually restart the app.  If your database crashes you are usually looking at major downtime and lost work that spans far more than a single session.

We are trying VERY hard to keep costs down for our customers.  Adding more code providers and runtime models adds significantly to our support and development costs.  That means higher prices, something no one wants.

js_vistadb United States

5 July 2009 #

Rick

I’m one that will probably skip VS2010 and go to their next release after that. For me VS2010 just doesn’t have items that I absolutely need at this time. I believe that most people consider VS releases as betas and service packs, one following the other.

Personally I don’t like the exclusive idea of teaming VistaDB4 with .Net 4.0 only. It may be a very good idea concerning support and added functionally; but it will make me wait a few years (possibly) to really need that type of product… especially if all I am working on is desktop apps etc. and looking forward to server support.

I would rather have you use 3.5 SP1 and adopt 4.0 as a transitional phase.

Rick United States

5 July 2009 #

js_vistadb

@Rick - thanks for the feedback.  I don't normally consider a SP a "release", but after VS 2008 SP1 I guess I should.  The SP had more changes then the original release.  That is a good point.  I have not heard yet what will "slip" from the initial release and go into a SP.

The only problem is that I don't think 3.5 SP1 is a stable platform for customers.  Either they are sticking with 2.0, or will move up to 4.  I think 3.5 was an oddball release and with the whole SP1 being 2x the size of the 3.5 framework without the SP it has hurt adoption.  It would be interesting to see adoption rate stats of what versions are installed on peoples machines, but MS does not release those details.

But in order to do EF 3.5 SP1 IS the minimum platform you can use...

js_vistadb United States

5 July 2009 #

Rick

What about the basic VistaDB 4.0 engine support as far as .net frameworks is concerned... do you plan to support the VistaDB 4.0 engine to run on multiple frameworks and have a separate provider for the EF edition or do you plan have the VistaDB 4.0 version as a whole run exlusively with the selected .net EF framework?

Rick United States

6 July 2009 #

js_vistadb

@Rick - That a key part of the decision process.  If we build a version of the engine that supports EF it can ONLY run on 3.5 SP1 (nothing prior).  We have no idea if that model will be supported in 4 or not - I currently don't think it will.  And that means a 1 off engine just for that runtime.

I don't think the .Net 4 runtime is going to run previous generations of EF.  I think it is an updated model that will require 2 codebases.  Pretty much worst case for us in terms of support and maintenance.  It is almost a forced fork of the codebase that we then have to split in terms of releases and cycles.  I REALLY do not want to do that unless there is no other choice.

We are nearly the point of no return for making that decision for VistaDB 4.  We can't wait around to see what Microsoft is going to do, we need to move the product along.  That is one of the reasons for this post - to get some of that feedback from users.  

Maybe it is time for another of our large polls from users on what they are using and need.  It has been about 14 months since the last one, and each of them we have done have been a huge source of feedback for us to make these types of decisions.  Didn't think about it until just now though.

js_vistadb United States

7 July 2009 #

AZatelli

I think the biggest problem for me isn't that you guys don't have an EF provider. It's that non of the ORM tools out there have an "official" provider for VistaDB. If you guys could reach out and work with someone, or have someone on your team create an "official" VistaDB provider for a popular ORM like Subsonic that would make me very happy. Grabbing an open source provider that hasn't been updated in 2 years and the original author is MIA on doesn't interest me. I think EF is bloated and entirely overkill for most of the projects that I work on and use VistaDB as my data source. Partner with a 3rd party ORM and roll with that.

AZatelli United States

7 July 2009 #

js_vistadb

@AZatelli - Entity Framework supports us and a few others.  The Open Source ORMs tend to not want to support any commercial database like ours.  We actually did build a provider for a couple of the ones you mention and they were rejected by the projects because we are not free.  They only are interested in free or free to develop tools.  We do not have a runtime fee system so we can't fit their model, sorry.

Is EF bloated?  Yes.  But lets move forward 2 years or more.  How many developers will be trained in EF vs some other ORM?  I am willing to bet that just because it is built into Visual Studio and the .Net framework they will have 10x the number of qualified developers.  Also the EF model is being adding to new versions of ADO.NET.  Since we are an ADO.NET Provider we are sort of obligated to add that support.  All of the other ORMs are really external tools that just analyze schema and gen code, they are not part of the ADO.NET model.

js_vistadb United States

22 October 2009 #

trackback

Social comments and analytics for this post

This post was mentioned on Twitter by netcoda: Reading - Be there first, or getting it right? http://bit.ly/FTYcG

uberVU - social comments

Comments are closed

Powered by BlogEngine.NET 1.5.0.99 and VistaDB 4

 Privacy Policy - Legal Nondisclosure - Refund Policy - Terms of Use

Log in