WilsonORMapper, EntityBroker, and LLBLGenPro

I've apparently really annoyed Frans, and Thomas a little too, so I thought I would do something different. First, let me just say that I've never spoken bad about either EntityBroker or LLBLGenPro that I can recall. In fact, I said publicly many times that both of their products are very good and highly recommended. Why? Because as Frans noted, my WilsonORMapper is "severely crippled" if you need more than simple CRUD. That's right -- my O/R mapper is a simple tool for simple minds only -- and that's all I want it to be. Yes, I want to add cool features, and yes I have a blog to announce it, but I try to also share what I learned in the process. Does that make me arrogant? I hope not, but its not the first time I've been called that, so I'm sorry and I'll try harder, but I hope my accusers can also try a little harder please.

So, before telling you more about EntityBroker and LLBLGenPro, I'd like to share with Frans what I have done right. First, I have done a great job of getting the O/R mapper message out there, as have many others like Steve. If that weren't the case then I wouldn't be getting so much positive email in the last few weeks. In fact, several have went out of there way to tell me how much the hostile attitudes of Frans and Thomas had turned them off! Yes, I have found that there are many people out there that just want a simple O/R mapper, which is where mine excels, but I have also recommended others to EntityBroker and LLBLGenPro while admitting mine wasn't up to their needs. So I think I'm helping the cause in general, and I'm probably even going to increase business for Frans and Thomas to some degree.

Finally, if my WilsonORMapper is so simple, what is it that EntityBroker and LLBLGenPro do that I don't? Both include "real" GUI designers, as will MS ObjectSpaces, whereas my ORHelper merely helps. Both support COM+ transactions, multiple concurrency types (supported now), full data-binding, object query APIs (some support now), cascading persistence (supported now), dirty-field only updates (supported now), and much better support and documentation. EntityBroker supports the major databases already, and I think I just got Thomas to start thinking MySQL seriously too now. LLBLGenPro has plans in the works to support Access, MySQL, and more, so its always been only MS ObjectSpaces (and some others) that I've criticized vocally in that regard. EntityBroker does some really advanced caching, and I have personally used it enough to say I really like it, although it is too "complex" for many simple cases.

I haven't ever used LLBLGenPro personally, since its not really my style, but it looks very good so I do recommend it too. Its designer will automatically discover your relationships, which seems extremely helpful. It also supports stored procedures, as does mine, so again I've never intended to criticize it in this regard. LLBLGenPro also supports things like joins, group bys, validation, and many advanced Oracle features I can only dream about. It also already supports multiple field primary keys, which is something I still need to try to get to. Do I think Frans should use only generic ANSI SQL? No, I've never said that -- I've simply said that starting with generic ANSI SQL will automatically get you working with many databases in the simple cases.

And that's what I don't get -- why are so many O/R vendors totally ignoring the simple users?  Are we really going to convince people they need an O/R mapper by raising the bar so high to just get started?  I still can't personally understand half of what Frans and Thomas list as their features, and they focus so much on these that the simple ones aren't obvious at all.  Many of the other vendors have much better explanations of the benefits of O/R mapping, but most of them do a terrible job at more than code generation.  I want people to really understand how O/R mapping can help them, and if they go buy someone else's then that's fine too.  But I don't really see how all the antagonistic debates in forums and blog comments make any of these points clear to most users.


  • Look at it this way. Without Paul's O/R mapper, I would have never even considered learning about them or using them in my business. Once I am able to understand the basics, I may find that the benefits are worthwhile and end up purchasing a product like Entity Broker. There is very little info about O/R out there and only by looking at Paul's 'simple' code have I been able to appreciate its application.

  • if I can't walk through the code within a day or two and understand exactly what is going on and how much work it would be to port to my application, I won't even consider it. With limited resources and time, I can't spend 2 weeks researching how to use a 'full-featured' mega-application. For people like me, KISS!

  • Paul, Keep up the great work. Keep in mind that Frans and Thomas are in a fight for their lives. They're about to become MS competitors. Yikes! Your O/R Mapper is just the thing that many developers need to help them understand what an O/R Mapper is, and how it can be implemented. The thing I LOVE about your mapper is its simplicity. You've done a killer job, as have Frans and Thomas. I hope you all keep it up!

  • Keep up the good work and don't worry about them, lot's of people appreciate what you are doing.


  • Paul: I agree with the above comments. Great learning tool, and I'm really impressed with your enhancement turnaround. When I was looking at O/R tools I had cost, support, and source code in mind. When I saw compliance with ObjectSpaces I was sold.

  • Well said! - I couldn't agree more that many applications out there will do fine using a simple O/R mapper without COM+ support and without advanced caching support for distribute systems. Heck, right now people manage to get by <gasp>_without_</gasp> such a tool, even if it hurts at time. I still think there is (a lot) of room for simple O/R mappers and also a necessity to have more complex ones. Preferably it would be a single tool, but I doubt that this will happen. Paul, you have done a fantastic job, as have Frans and Thomas, and I'd love to see more of it.

  • "And that's what I don't get -- why are so many O/R vendors totally ignoring the simple users? "

    How simple do you want it to get, Paul? :) Point, click, go, start coding. I can't make it easier than that.

    The problem with simple users is that they do not exist. Let me illustrate that with an example.

    In 2002 I wrote LLBLGen, which is a stored proc/call class generator for Sqlserver. It generates simple CRUD stuff and some advanced selects. In other words: pretty basic but enough for a lot of situations. "Enough for simple users/usage" Right? Well... no. You see, only the very very small, home-brewn projects are requiring very simple data-access. You very fast run into aspects like "Get all records X which have a record Y where Y.foo = 10". Is that simple stuff also? No. Most basic tools for simple stuff can't do that. It's a simple query though.

    The problem thus is: if you offer a tool, people start using it, but it's very very likely that the user runs into its limitations sooner or later. With a simple tool, it will be 'sooner', with an advanced tool it will be 'later' or probably 'never'. Does the user knows this up front? You might think he does, but I think he doesn't in a lot of situations and according to the big pile of email requesting flexible where clauses in the simple LLBLGen 1.x tool tells me I'm right.

    Like I told you before, your code is ok, your tool is ok and you did a good job writing it. It's your marketing skills that need some perfection :) For me you didn't have to write an article and mention my tools name, but it's appreciated very much of course. For me, it's important that you understand that what YOU say, or better: don't say, is read by a very very big audience who think and know YOU are the man to listen to. In that light it is important to understand that if you paint an image of the reality which looks very simple and easy, it might misinform your readers, although I don't think that's your intention.

    I hope you see my point. There will always be room for tools which simply do very simple things, because they can't do a lot, but what they can they do well. Like I said earlier, that's fine by me. You obviously have had great fun programming your tool and that's a great thing to have in life, so I'd be the last person to tell you to quit (not that you would do that if I said so ;)). I hope you now understand why I was annoyed, again: not because of the presence of your tool, but about the wrong image you created of reality.

  • And what I'd like to know (and please provide me with an example) is who I tortured with a hostile attitude?

    My native language isn't English, it's Dutch. We have different language constructs to be 'polite' and when I write a sentence it might sound rude, although I really don't know that, simply because I'm not a native English speaker. (English written by Dutch is said to be less polite, due to the sentence constructs).

    I always try to be reasonable, even if some people are not that polite to me or very stubborn. However you mention in your blog I apparently have a hostile attitude, and I'd like to see proof of that or examples.

  • I know very little about O/R mappers, definitely not enough to debate the topic but I do know about having professional courtesy which the two of you seem to have very little of. Whether it be because English is not your first language or you really just don't care I don't know. It's very clear what both of your feelings are concerning the WilsonORMapper from many of your threads in the ASP.Net forums, many of which I and others have considered borderline hostile and felt the mods should have locked (and there are threads wondering why the mods let this go on). Now to come trolling around his blog basically looking to pick a fight is pretty pathetic. If you don't find Paul's contributions valuable or his product sub-par that’s fine but it's obvious that others do and despite your guys's constant barrage of "criticism" which boils down to "yours sucks mine is better" Paul has stayed very professional and I applaud him for that. If any of my developers had provided "Criticism" in the manner in which you guys do you'd have been out the door a long time ago. And as for your products they sound like excellent full featured products and I hope your businesses are successful but I can only say as developer if I was looking for a O/R mapper and witnessed this kind of behavior I’d think twice and likely just wait for MS.



  • I agree completely with Josh's comment above. I have been following the .Net O/R community since its inception and have to say that the behaviour of several prominent individuals in the community is extemely unprofessional and unproductive. Their behaviour is quite clearly nothing to do with any language barrier or cultural differences; it is a simple lack of professional courtesy that does nothing to enhance the reputation of those involved.

    I evaluated several O/R products for my company and although I was fairly impressed technically with both Frans and Thomas' products, I was put off by their behaviour in a number of public forums. I was not comfortable recommending products where the main public representatives of the companies were given to rudeness, arrogance and ad hominem attacks on perceived critics and

    competitors. Real software companies do not allow their staff to mouth off at potential

    customers in this way.

    This is all IMHO of course, but a quick browse of the relevant google groups will show many

    examples of the kind of behaviour that has put off myself and many others.

    I think the fact that this is being discussed at all is more sad than anything else because Frans and Thomas have both made great contributions to the disussion and development of O/R mapping in .Net, and would perhaps be taken more seriously if they could turn off the aggression and insults when trying to promote their products.

  • Regarding Fran's comment:

    "It's your marketing skills that need some perfection :)"

    I personally have seen numerous threads where Frans completely rips a user apart for disagreeing with his perspective... ending up just saying the other guy was stupid.

    Regarding the comments by Josh above, I agree also.. When you are producing a product that you want people to buy, first and foremost professionalism will sell more copies. It might lose you more arguments, but hey, you're not getting paid to win arguments over who's idea is better or whats right / or wrong.

    Fact is, for any given problem there are possibly dozens of solutions. Only an arrogant fool would argue that his was the "best" solution.

    I tried Entity Broker and yes, I was flooded by its complexities and could not use it.

    If LLBGen was so great, why not use XSLT from the start rather than hard code all the sql generation in code? I disagreed with that. So, I wrote my own using XSLT and a database reverse engineering process that generats xml schema from the db.

    The moral of the story, use what works for you. And keep in mind that tools for the masses usually means masses of features a single developer does not need [but pays for anyways].

Comments have been disabled for this content.