I have been working with LINQ quite a bit for a contract I am working on. And I have to say I’m not impressed. I think Microsoft has continued to make poor decisions with the .NET framework. Although I like the idea of a simple to use query language / ORM (Entity Framework), there are a number of problems.
- The documentation is absolutely horrible.
- It can be rather difficult to get the query language to do what you want it to do.
- Exception messages are misleading and not informative.
I am originally a .NET guy. I started my professional career working with C# and I really liked it. Recently, I made the switch over to Java. I liked the idea of Java because there is such a great open source community that has turned out a lot of really excellent and re-usable code. In the open source community, the documentation is, in general, excellent. Microsoft’s documentation has always been piss poor because how else would the publishers sell books? In open source world, there are books available, but the documentation is usually sufficient.
I have run into a number of situations where the query language is very difficult to work with. Specifically with reporting type queries where you’re getting into sub-selects. Again, if the documentation were better I probably would have found a decent solution to my problem quickly.
My biggest trouble with the whole thing is when there is a problem and an exception is thrown, the messages are horrible. For instance, I created a quick class to import some data from tab delimited files. I set up some new data models and created my tables. I gave the code a shot and I received an exception with this vague message: “System.Data.Linq.ChangeConflictException: Row not found or changed”. All I can think of is “PC Load Letter, WTF does that mean?” It turned out that one of my columns in the model design didn’t have the same data type as the column in the database. Come on M$, how does that message make sense for that problem? If it weren’t for someone else having that same problem in a forum, I could have lost HOURS hunting around trying to figure that out.
Again, I am a Java guy. I am used to Hibernate which has been around for a while and is rock solid. I feel like the open source community comes up with much better solutions compared to Microsoft. Everything they do is always very specific, always a black box with very little insight, and generally has all kinds of annoyances that make the thing a pain to work with.
EDIT: Another thing…there is no way to batch insert. Inserting seems to take far longer than it should…something that would take mere minutes with Hibernate / MySQL is going on an hour with LINQ / SQL 2005.