Wednesday, August 26, 2009

NHibernate Schema Export Frustrations!

NHibernate makes schema creation quick and easy, but one situation I found annoying was that calling new SchemaExport().Execute() wouldn't drop the existing schema first. I found myself manually deleting the tables in the database in the correct sequence every time I wanted to blow away the schema and rebuild it.

Error


Through some Googling, I discovered that if you split the SchemaExport into multiple calls, you no longer receive the issue.

Before


After


It seems as though the Drop method doesn't have an issue on a fresh database, yet drops the database elements of they already exist.

Playtime with NHibernate and Spelling mistakes :(

So I have finally decided I have some time to take a look at NHibernate. My curiosity for the tool has as of recent, become quite large. Two of the team members where I am currently working keep ranting and raving about how "If we were using NHibernate...", "NHibernate would be able to do this easier..." and so on.

Nearing the end of one of our projects, I am finding myself having some free time, yet nothing to fill that time with. What a great opportunity to familiarize myself with a new tool, even possibly prepare myself to implement it in the coming project.

After taking a first stab at the tool, I can say that the concepts are pretty simple to grasp. Once you finally get it working, you can see a lot of the benefits that it can bring to a project. Speed and time are definitely saved in having to write schema scripts and stored procedures. The only drawback that I can see with the tool, is the learning curve of setting up the XML mapping documents and configuring the tool correctly.

It was probably two days that I had been looking at NHibernate and getting things initally set up wasn't too difficult. As soon as I attempted to create a DB schema and insert one-to-many relationships, all of my motivation flew out the window. I ran into the issue of my child elements not being linked to my parent elements in the database. The parent ids were not getting stored and as a result they were stored as null. I had 3 other developers, all who of which had one-to-many relationships working with the tool in the past, look at what I had set up. We were all mind boggled. It was only then that one of the developers said, "Get rid of all the table="something" and column="something" so we can simplify the issue. After doing so, the ids for the parent-child relationships were being set. Further investigation lead to the discovery that one of the table names didn't match what was defined. This lead to the null entry in the child table for the parent id. Now the problem is solved, but the issue remains that although the tool is very powerful and makes your life easier, it can also just as quickly drain you will to live. Be careful with your spelling, and remember to bring a problem to its simplest form.

Thursday, July 23, 2009

Fantabulous Auto Tabbing with jQuery

One of the tasks my team was assigned was the ability to implement auto tabbing in a web application. 98 percent of the population would cringe as they read the previous sentence because auto tabbing is not natural. It is a business requirement, and because the business wouldn't budge on the feature, it HAD to be done.

Enter jQuery AutoTab by Matthew Miller

AutoTab is fairly simple, as are most jQuery plugins. It just extends the jQuery namespace adding a function called autotab. Apply this method to any text box, enter target, previous and format and the plugin does the rest for you.

Without copy and pasting the details of the plugin, click here to see the documentation.

Thursday, July 9, 2009

Linq saves the day when sorting ui lists...

Have you ever been in a situation where you have to write elaborate code to order a list of something by date and some of the dates are null? Well worry not, Linq is here to rescue.

Background:

This list contains an object that has a created date. The created date did not exist in the legacy database, and was therefore null. Unfortunately using Linq from o in list orderby o.CreatedDate descending didnt work.

Solution:

After some investigation, (and whining about having to do lots of work for simple gain), I discovered Union in Linq. Sure enough this solved the problem and i could bind to the repeater with the correct order.

Tuesday, June 23, 2009

To Mock-You or to Moq?

Recently I have been introduced to a mocking framework build specifically for .net 3.5 and C# 3.0. This framework is called Moq. More information, downloads and documentation can be found @ http://code.google.com/p/moq/

As a brief introduction, Moq is simple. That is all their is to it. The complexity of record and replay has been completely removed from the framework, well actually it was never introduced. We all know how annoying it was to learn the syntax of record and replay, and even once you understood it, really you still didn't.

Moq takes advantage of LINQ and Lambda expressions to do all the work. Here is an example of a simple person presenter test:



Moq makes learning and using mocking simple.