NHibernate and Castle Active Record (Part 1)

Introduction

The Castle ActiveRecord project is an implementation of the ActiveRecord pattern for .NET. The ActiveRecord pattern consists on instance properties representing a record in the database, instance methods acting on that specific record and static methods acting on all records.

Castle ActiveRecord is built on top of NHibernate, but its attribute-based mapping free the developer of writing XML for database-to-object mapping, which is needed when using NHibernate directly.

You can find the home page of the Castle project here.

How will we use it?

My intent is not to implement the ActiveRecord pattern but rather use ActiveRecord

  1. as an alternative way to define the mapping between my domain objects and the relational database.
  2. to simplify the initialization of NHibernate (I'm not so sure about this...)

In my previous posts (here and here) I have shown you how to define the mapping between domain objects and database tables by writing XML documents. Active Record allows me to decorate my domain objects with attributes which define the mapping instead of (hand-) coding XML documents.

Downloading and compiling the Castle Active Record Trunk

If you have never downloaded and compiled OSS software from a SVN repository before please refer to my previous post about preparing your system for NHibernate which you can find here.

I assume you have TortoiseSVN installed as your SVN client.

Make a new sub-folder called 'Castle' in your OSS folder (e.g. m:\dev\OSS\Castle). Right click on the folder an select 'SVN Checkout...'. Enter the URL 'http://svn.castleproject.org:8080/svn/castle/trunk/' in the Checkout dialog and press OK. The Castle stack will be downloaded. Depending on the bandwidth of your Internet connection this may take a while. The whole Castle stack contains more software than we need at the moment but let's just download all and ignore the parts we don't need. The whole download is around 21 MB.

image

When the download is finished you can compile the Castle stack. This is an automated process.

Unit Tests during the build process

During the build a lot of unit tests will be executed. For this we either need NUnit or MbUnit on our system. If you don't  have it you can e.g. download NUnit from here. Download just the zip file containing the binaries for .NET 2.0 (at the time of this writing it's the file 'NUnit-2.4.7-net-2.0.zip'). Extract the binaries into a sub-folder of your OSS directory (e.g. m:\dev\OSS\nunit).

Building the Castle Stack

Open a command console and navigate to the directory where you have downloaded Castle (e.g. m\dev\OSS\Castle). Assuming that NAnt is also installed in the OSS directory enter the following command

..\NAnt\bin\nant.exe -D:nunit-console=<path to nunit-console.exe>

where at the place of <path to nunit-console.exe> you enter the path where you have unzipped/installed NUnit. In our case this is 'm:\dev\OSS\NUnit\bin\NUnit-Console.exe'.

Now the whole Castle stack is compiled and all tests are executed. This can take a while. On my machine it took about 2.5 minutes. The overall build may fail but still the assemblies are created (the reason of the overall failure might be that some of the Unit test fail. Remember that we are on the Trunk and this is under constant development. Sometimes some of the tests may thus fail.). The result on my machine was as follows

image

After building the Castle stack you should find a new sub-folder 'build' in the Castle folder.

Using Active Record

External dependencies of the Solution

For an introduction on how to setup a new solution please refer to this post. You can now copy all the necessary external assemblies on which the solution depends into the SharedLibs folder in your solution tree. You should copy all files (including NHibernate) from the build folder of Castle which was created during the build process described above.  For this solution you need at least the following files

image

The sql*.dll are in the folder since we are using SQL Server Compact edition as a database. If you have read the previous posts about using NHibernate (e.g. here and here) the only new files are Castle.ActiveRecord.dll and Castle.Components.Validator.dll.

The Domain Model and the Mapping

To have a good comparison let's take the same domain model as in this post. Below is the class diagram of the domain.

image

Now instead of writing a domain class and then a XML mapping document we now only write the domain class and decorate it and its members with attributes. During initialization ActiveRecord will automatically generate the XML mapping documents for us which NHibernate requires for the object-relational mapping.

When using attributes the Order class will look like this

using System;
using Castle.ActiveRecord;
using Iesi.Collections.Generic;
using NHibernateAndActiveRecord.Domain;
 
namespace NHibernateAndActiveRecord.Domain
{
    [ActiveRecord(Table = "Orders")]
    public class Order
    {
        public Order()
        {
            OrderLines = new HashedSet<OrderLine>();
        }
 
        [PrimaryKey(Generator = PrimaryKeyType.Guid)]
        public virtual Guid Id { get; set; }
 
        [BelongsTo(NotNull = true)]
        public virtual Customer Customer { get; set; }
 
        [Property]
        public virtual string OrderNumber { get; set; }
 
        [Property]
        public virtual DateTime OrderDate { get; set; }
 
        [HasMany(Table = "OrderLine", 
                 ColumnKey = "OrderId", 
                 Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)]
        public virtual ISet<OrderLine> OrderLines { get; set; }
    }
}

compared to a typical XML mapping document this is much more wrist friendly, isn't it. Some people also argue that attributes help to document the code, since I can immediately see e.g. which is the primary key and which property values should never be null, etc. I do not have to consult another file but can just look at the domain class to have the "full" picture. On the other hand the attributes also "clutter" my nice code and I partially violate the SoC pattern since mapping is not part of the domain in a DDD world.

Now let's look at the OrderLine class

using System;
using Castle.ActiveRecord;
 
namespace NHibernateAndActiveRecord.Domain
{
    [ActiveRecord]
    public class OrderLine
    {
        [PrimaryKey(Generator = PrimaryKeyType.Guid)]
        public virtual Guid Id { get; set; }
 
        [Property(NotNull = true)]
        public virtual int Amount { get; set; }
 
        [Property(NotNull = true, Length = 50)]
        public virtual string ProductName { get; set; }
    }
}

Here I have defined that Amount and ProductName cannot be null (this will be used for the generation of the database schema - there will be not null constraints on the corresponding table column). I also have defined that the maximal length of the ProductName cannot exceed 50 characters (also used for schema generation).

Finally the Customer class

using System;
using Castle.ActiveRecord;
 
namespace NHibernateAndActiveRecord.Domain
{
    [ActiveRecord]
    public class Customer
    {
        [PrimaryKey(Generator = PrimaryKeyType.Guid)]
        public virtual Guid Id { get; set; }
 
        [Property(NotNull = true, Length = 50)]
        public virtual string CompanyName { get; set; }
    }
}

That's it. Our domain and mapping is complete. We can now write our tests similar to the once we used in this post.

Unit Tests

Add an xml document to your test project and call it ActiveRecord.cfg.xml (similar to what you do when you ONLY use NHibernate). Add the following content to the file

<?xml version="1.0" encoding="utf-8" ?>
 
<activerecord>
 
  <config>
    <add key="connection.provider"
         value="NHibernate.Connection.DriverConnectionProvider" />
    <add key="dialect"
         value="NHibernate.Dialect.MsSqlCeDialect" />
    <add key="connection.driver_class"
         value="NHibernate.Driver.SqlServerCeDriver" />
    <add key="connection.connection_string"
         value="Data Source=SampleDb.sdf" />
    
    <add key="show_sql"
         value="true" />
  </config>
 
</activerecord>

Set the Copy to Output Directory to Copy always.

Note: we are using SQL server compact edition in this case (the second, third and fourth entry in the XML are specific for this database).

Add an new item of type LocalDatabase to the test project and call it SampleDb.sdf.

Still in the test project add a reference to the System.Data.SqlServerCe.dll in the SharedLibs folder. This assembly contains the ado.net driver for SQL server compact edition.

Open the properties page of the test project and add the following command in the "Pre-build event command line" text box

copy $(ProjectDir)..\..\SharedLibs\sqlce*.dll $(ProjectDir)$(OutDir)

This command copies all the SQL server CE files from the SharedLibs folder to the target folder of the test project. Note: this is important, otherwise the test will not run. Also note that this is only needed if you use SQL server CE.

The first unit test we write will test whether we can successfully create the database schema or not. This is always a good test if your new to ActiveRecord. Add a new class CreateSchema_Fixture.cs to the test project and add the code below

using Castle.ActiveRecord;
using Castle.ActiveRecord.Framework.Config;
using NHibernateAndActiveRecord.Domain;
using NUnit.Framework;
 
namespace NibernateAndActiveRecord.Tests
{
    [TestFixture]
    public class CreateSchema_Fixture
    {
        [Test]
        public void Can_initialize_and_create_schema()
        {
            var configurationSource = new XmlConfigurationSource("ActiveRecord.cfg.xml");
            ActiveRecordStarter.Initialize(typeof(Customer).Assembly, configurationSource);
            ActiveRecordStarter.CreateSchema();
        }
    }
}

In the first line of the test we provide ActiveRecord with the necessary configuration info. In the second line we tell ActiveRecord to initialize itself (and NHibernate) with the given configuration info as well as the assembly in which the domain classes are implemented (and which also contains the mapping info since we use attributes). Then in the third line we create the schema. If there is already a schema in the db this will be deleted first.

If you have done every thing right, then the test should succeed.

Now we can continue to test our domain model. Let's first implement a base fixture class to free us from repeating code again and again. I suggest a class as follows

using Castle.ActiveRecord;
using Castle.ActiveRecord.Framework.Config;
using NHibernateAndActiveRecord.Domain;
using NUnit.Framework;
 
namespace NibernateAndActiveRecord.Tests
{
    [TestFixture]
    public class TestFixtureBase
    {
        [TestFixtureSetUp]
        public void TestFixtureSetUp()
        {
            var configurationSource = new XmlConfigurationSource("ActiveRecord.cfg.xml");
            ActiveRecordStarter.Initialize(typeof(Customer).Assembly, configurationSource);
        }
 
        [SetUp]
        public void SetupContext()
        {
            ActiveRecordStarter.CreateSchema();
            Before_each_test();
        }
 
        [TearDown]
        public void TearDownContext()
        {
            After_each_test();
        }
 
        protected virtual void Before_each_test()
        { }
 
        protected virtual void After_each_test()
        { }
    }
}

This class is equivalent to the class presented in this post on NHibernate. Once for each test session I configure ActiveRecord (and implicitly NHibernate). Before each single test I recreate the database schema to avoid any side effects leaking from one test to another. I also provide virtual methods which can be overridden in the child classes to execute specific code before or after each test.

Summary

I have introduced Castle ActiveRecord as an alternative way to use NHibernate. It's a layer on top of NHibernate and simplifies in many cases the usage of NHibernate. I have shown you how you can get the latest code from the source repository and compile it. I have then setup a simple domain model and defined a test fixture base class.

I'll continue to implement the tests in part 2 of this series. So keep ready...

Enjoy

Blog Signature Gabriel.

Print | posted on Saturday, April 26, 2008 7:33 AM

Comments on this post

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Cool stuff.
Few pointers:
a. The class level attribute has the "Table" parameter as the default first parameter, so you can:
[ActiveRecord("TableName")]

b. On ActiveRecord's config section you can set pluralizeTableNames="true" and then use [ActiveRecord] public class Order .. to map into "Orders" table

c. On PrimaryKey attribute, the generator is also the default parameter, so again you can
[PrimaryKey(PrimaryKeyType.GuidComb)]

d. Usually I'd prefer GuidComb over Guid.
Left by Ken Egozi on Apr 26, 2008 8:05 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
@Ken: thanks for the feedback! I'll integrate it into the second part of this series...
Left by Gabriel Schenker on Apr 27, 2008 7:03 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Hi - nice article.

I particularly like the part about unit-testing using the SQL CE database. However, I cannot figure out how to create the LocalDatabase!?

I am obviously missing something about SQL CE, could you provide me with more information about how to create that database or perhaps point to another resource that explains how?

Cheers,
Thomas
Left by Thomas Koch on Apr 29, 2008 12:53 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Useful article.

I had to open the windows box as Administrator otherwise the gacutil did not work.
I had to create 2 empty database test and test2, and I had to start the MSDTC service.

The compilation alone is Ok, but if I enable the unit test (that is as default) I have the following error:

[exec] Unhandled exceptions:
[exec] 1) Castle.Facilities.Remoting.Tests.ConfigurableRegistrationTestCase.ClientContainerConsumingRemoteComponents :
System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain.

any suggestions?

Cheers,
Alessandro
Left by alessandro Cavalieri on Apr 29, 2008 2:47 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
@Thomas: for a detailed description see the following post: http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx
Left by Gabriel Schenker on Apr 29, 2008 6:30 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
@Alessandro: 1) why do you use the GACUTIL?
Left by Gabriel Schenker on Apr 29, 2008 6:33 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
I do not use GACUTIL is is part of the build process (the NANT script I suppose).
Left by alessandro Cavalieri on Apr 29, 2008 9:54 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Very Nice topic, I am really looking forward for such implementation in my scenario.

Scenario:
I want to use ASP.Net Dynamic Data Framework for IBM DB2 which is not supported by Microsoft at this moment using LINQ to SQL or entity framework. So can we use castle active records for implementing Dynamic Data using NHibernate so that i can interact with DB2 using Dialect
Left by Ankush on Sep 26, 2008 7:02 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Excellent article!

Is the second part of this series being worked on?
Left by allen on Feb 19, 2009 5:06 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Hey, that was interesting,

introducing Castle ActiveRecord as an alternative way to use NHibernate,a layer on top of NHibernate that simplifies usage of NHibernate
can help a lot
Anyway, thanks for the post
Left by software development company on Aug 13, 2009 8:00 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...

Requesting Gravatar...
Excellent article!

Is the second part of this series being worked on?
Left by beds on Nov 04, 2009 5:00 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
This class is equivalent to the class presented in this post on NHibernate. Once for each test session I configure ActiveRecord (and implicitly NHibernate). Before each single test I recreate the database schema to avoid any side effects leaking from one test to another
Left by http://www.videopokerstars.com/ on Nov 23, 2009 9:44 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Really very descriptive information. Thank you.
Left by work at home blog on Nov 26, 2009 9:29 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Thanks for sharing. Very nice!
Left by Auto Insurance Comparison on Dec 06, 2009 7:55 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
aserack
Left by silver on Dec 21, 2009 7:10 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Very nice!
Left by pandora jewelry on Dec 24, 2009 11:52 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
That Sounds interesting, i agree with you. Please keep at your good work, I would come back often.
Left by Ann on Jan 12, 2010 1:51 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
You should either encrypt or hash a password. Hashing is a bit more secure (depending on the algorithim of course). Because it can't be reversed; however, encryption can be more functional since you can have a retrieve password option. With hashing you have to generate a new password..
Left by bingo en ligne on Jan 13, 2010 11:44 PM

# sharmawebsolution

Requesting Gravatar...
why seo is important for business?
http://sharmawebsolution.blogspot.com/
Search engine optimization (SEO) is essential if you need to be successful in making money online.
Left by sharmawebsolution on Jan 14, 2010 4:36 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
well i think the same thing
Left by make money online on Jan 16, 2010 1:13 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
What's more, a bracelet can also be equipped with different small pandora jewelry and even you can change it according to your mood at any time. Here are some meanings of pendant. Small Plane stands for traveling and adventure ; anchor, stability and hope; your baby's boots, having a lot of babies; small feeding pandora bracelets abundant food; Church means happiness and stability of marriage; dragonfly means riches; Eiffel Tower means travel and exploration; four-leaf clover means fortune; horseshoe means luck; Nest means a happy family; bride shows a happy bride in her coming pandora jewelleryship steering shows calming and confidence; pandora ukcoin pandora beadsshows rich marriage life. Wish bone, dreams being about to come true; pandora charm bracelets, love; one heart shot by an arrow, romantic love; purse, wealth; and heart-shaped lock, true love.OK
Left by pandora jewelry on Jan 28, 2010 3:48 PM

# re: NHibernate and Castle Active Record (Part 1)

Left by ugg boot on Feb 08, 2010 7:00 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
I will forward this article to him. Pretty sure he will have a good read. Thanks for sharing!
Nursing degree | Online Nursing degrees | public administration school | social work school | Online Counseling Psychology Degree
Left by siomy on Feb 09, 2010 10:05 PM

# linkslondon

Requesting Gravatar...
It has fulfilled the fantasy and entreaty of all ladies in the relations London, the best promotion excellent links of london jewellery silver jewels, forever sells very securely once it is very thrilled to collect links of London necklace. !!!!!!!!
Left by linksoflondon00000 on Feb 15, 2010 8:44 PM

# re: NHibernate and Castle Active Record (Part 1)

Left by gucci shoes on Feb 21, 2010 2:15 PM

# re: NHibernate and Castle Active Record (Part 1)

Left by pandora jewelry pzm on Feb 21, 2010 2:41 PM

# re: NHibernate and Castle Active Record (Part 1)

Left by cheap picture frames on Feb 22, 2010 6:04 PM

# re: NHibernate and Castle Active Record (Part 1)

Left by custom essay writing on Feb 22, 2010 10:08 PM

# Perfect World Gold

Requesting Gravatar...
Do you knowPerfect World Gold?if you play the online game, you will know thatBuy Perfect World Goldis the game gold,in the game if you had morePerfect World Silver,you will had a tall level, but if you want to Perfect World money, you can come here and only spend a little money then can bought thePW Gold.Quickly come here.
Left by Perfect World Gold on Feb 24, 2010 1:34 PM

# discount ed hardy women long sleeve shirts sales online

Requesting Gravatar...
YS0225A5 If you think you are beaten, you are! you think you dare noted hardy clothing, you don't! If you want to win but think you can't, It's almost a cinch you won't ed hardy hoodies! If you think you'll lose,you're lost! For out of the world we find.Success begins with a fellow's will,It's all in a ed hardy shirts state of mind! Life's battles don't always go.To the stronger and faster ed hardy coats man,But sooner or later the man who wins,Is the man who thinks he can! When You Belive http://www.edfashionclothes.com/,Many night we've prayed!With no proof anyone could hear!In our heart a hopeful moncler online store song,we barely understood!Now we are not afraid !Although we know there's much to fear!We were moving the moncler jackets mountian long,Before we knew we could!There can be miracles!
Left by discount mens moncler down coat on Feb 24, 2010 9:56 PM

# discount Ugg Broome Boots in chestnut leather online sales

Requesting Gravatar...
YS0225A8 Before there was no reason in the world,As now there is!The moncler jackets course of water was my only course,My repetitions oceans' sough and swell ugg adirondack boots!My seasons pleasurable,Before there was no reason in the world,As now there is ugg broome boots!To measure time from sleep I rose to sleep,To measure space I pastured orprise http://www.edhardy-buy.com/,O meadows of resemblances,I was the grove on whose mosaic floors,The moncler online seeds of otherwise were spent,My gods had many arms,I was the Caesar of unmarshaled grass ugg boots!Faustus in the branches,My first ambitions were my sorrows long!Before there was no reason in the world,As now there is!
Left by discount womens moncler jacket on Feb 24, 2010 11:00 PM

# discount air jordan shoes 23 sales online

Requesting Gravatar...
YS0225A7 when the sun hugs the moon, the sky clses her eyes.when the sun hug the moon the sea quiet her jordans shoes.when the sun hugs the moon,the forest stops her susurrus.when the sun hugs the nike sb dunk high,the desert hodlds her breathe.Thousands of years's waiting is only for this nike acg shoes moment.Never be disappointed.Never give up.It hax been sucha long ime.At nike air max 2003 this momentmeet each other in course of time.Do not cry,Moon.I guard you forever.Cause you are in my life,everyting has its meaning.The fascinating Diamond Ring,is the ring i give you,May it give you warm http://www.nikejordanshoes2sell.com/ threduce your tears.Do not cry,Sun,I will be there with you forever/Meeting you has given me precious memeory.The resplendent Baily Beads.is the gem i give you .May i give you cheap air jordan 22 shoes strength, shine in your morning.Meet soon and part soon.It makes peop;e retrospect in spite of lasting a few minutes.A long times waiting is coming.Don't know when the next meeting is .When the sun hugs the Moon. the Moon hugs the sun as well Hugging tightly,regian the lost nicety.
Left by discount nike air max shoes sale on Feb 24, 2010 11:04 PM

# discount air jordan shoes 25 sales online

Requesting Gravatar...
YS0225A6 When you belive,Though hope is frail.It's hard to kill,Who knows what cheap prada shoes miracles,You can achieve,When you belive! Somehow you will,

You will when you belive new nike air max!And in this time of fear, When prayer so often proves in vain, Hope seems like the http://www.nikeaf1jordanshoes.com/summer birds. Too swiftly flown away, And now I am standing wholesale gucci shoes here.My heart's so full I can't explain.Seeking faith and speaking women's nike shox words I never thought I'd say, They don't always hen when you ask authentic air jordan shoes.And it's easy to give in to your fear. But when you're blinded by your pain!
Left by discount mens moncler down coat on Feb 24, 2010 11:09 PM

# discount christian louboutin sandals online sales

Requesting Gravatar...
YS0226A1 That your heart has been broken,Hear the words,I'm e, my child,;And know your christian louboutin uk angel has spoken.For even in the darkest hour,When all of discount louboutin shoes hope seems gone,They'll give you strength to live your life,And desire to go on.And if your faith in Heaven, Should ever fade away,They'll help renew your christian louboutin boots spirit, And help you find your way.Even though you're ever filled with doubt, About the christian louboutin pumps life you live,Know that they are there to give you All that they can give.For you see, the Father sent them,Because to Him, you mean so much,That He sent them just for you,my louboutin sale friend,And your life, they will touch.They will always be here,They will never leave your http://www.christianlouboutinshoestore.com/ side;And upon their strength and guidance,You always may rely.Take comfort in their guidance, Draw strength from up above,And know that their sweet presence,Is God's precious gift of love.
Left by cheap christian louboutin shoes on Feb 25, 2010 3:35 PM

# discount women's ugg elsey boots 5596 sales online

Requesting Gravatar...
YS0226A2 If I were a boy again, I would practice perseverance more often, andever give up a thing because it was ugg australia boots or inconvenient. If we want light, we must conquer darkness. Perseverance can sometimes equal genius cheap ugg boots in its results. “There are only two creatures,” syas a proverb, “who can surmount the pyramids—the eagle and the snail.” If I were a uggs sale boy again, I would school myself into a habit of http://www.topsnowboots.com/ attention; I would let nothing come between me and the subject in hand. I would remember that a good skater never tries to skate in two ugg cardy boots directions at once. The habit of attention becomes part of our life, if we begain early enough. I often hear cheap gucci shoes grown up people say “ I could not fix my attention on the sermon or ugg coquette book, although I wished to do so” , and the reason is, the habit was not formed in youth.
Left by cheap ugg upside boots 5163 on Feb 25, 2010 3:41 PM

# discount Women's ugg adirondack boots II sales online

Requesting Gravatar...
YS0226A3 Hold fast to dreams.For if dreams die. Life is a broken-wingd bird,That ugg australia boots can never fly.Hold fast to dreams. For when dreams go,Life is a barren ugg tall boots field, Frozen only with snow !You never know until you try; And you never try unless you really try ugg cardy boot. You give it your best shot; You do the best you can. And if you have done everything http://www.uggsnowbootsbest.com/! In your power,and still,The truth of the uggs argyle knit matter is! That you haven\'t failed at all.When you reach for your dreams,No matter what ugg boots they may be,You grow from the reaching;You learn from the trying;You win from the doing.
Left by cheap ugg classic cardy boots on Feb 25, 2010 3:48 PM

# discount reebok nfl jerseys online sales

Requesting Gravatar...
YS0226A4 A true friend is someone who reaches f your hand and touches your cheap hockey jerseys heart.There's always going to be people that hurt you,so what you have to do is keep on trusting nfl jerseys and just be more careful about who sport jerseys you trust next time around.Make youself a better person and know who you are discount nba jerseys before you try and know someone else and expect them to know you mlb jerseys on sale.Remember:Whatever happens,happens for a reason.How many people actually have 8 true http://www.nfljerseymlb.com/friends Hardly anyone I know.But some of us have all right friends and good friends.
Left by cheap adiads nba jerseys sale on Feb 25, 2010 3:50 PM

# discount ugg sienna miller boots 5818 sales online

Requesting Gravatar...
YS0226A9 Unwearied still, lover by lover,They paddle in the cold,Companionble ugg australia shoes streams or climb the air;Their hearts have not grown old;ugg coquette Passion or conquest, wander where they will, Attend upon them still ugg adirondack boots. But now they drift on the still water, Mysterious, beautiful; Among what http://www.uggboots4buy.com/ rushes will they build, By what lake’s edge or pool,Delight men’s mbt shoes eyes when I awake some day.To find they have flown uggs classic cardy away?Before there was no reason in the world As now there is I was the bough bent easy by a ugg boots bird I was the vague blue-grazing flock The sleeping and invisible!
Left by cheap women's ugg elsey boots on Feb 25, 2010 3:57 PM

# discount mens air jordan shoes 13 online sales

Requesting Gravatar...
YS0226A10 When you are old and gray and full of slee,And nodding by the moncler jackets fire, take down this book! And slowly read jordans sheoes , and dream of the soft look,Your eyes had once, and of their cheap nike shoes shadows deep;How many loved your moments of glad grace,And loved your beauty with nike air force 1 love false or true; But one man loved the pilgrim soul in you,And http://www.onestop-onlineshopping.com/ loved the sorrows of your changing face; And bending down beside the designer clothing glowing bars,Murmur, a little sadly, how love fled.And paced upon the mountains overhead discount air jordan shoes,And hid his face amid a crowd of stars.
Left by cheap nike air max 90 online on Feb 25, 2010 3:59 PM

# discount louis vuitton damier canvas handbags online sales

Requesting Gravatar...
YS0226A11 Surrounding you are angels,They are there to gide your path.If designer purses weaesskn overcomes you,They'll give you strength if you will ask. They are your protection.When discount designer bags on sale life seems too hard to bear,And though you feel alone at times, The louis vuitton 2009 angels ... they are there.Their faces may be hidden And their voices you might not hear,But they are ALWAYS with you,Through your laughter or your tears.http://www.handbags4buy.com/ They'll walk along beside you,They'll guide your leather handbags steps along the way, They'll comfort you and hold you,Protect you dior handbags night and day.They'll hold to your hand tightly ,They'll not ever let it go,And they'll gently lead you cheap designer handbagsforward,Taking each step very slow.For even as you slumber,They watch closely over you;They are there beside you. In each and every thing you do.
Left by cheap nike air max 90 online on Feb 25, 2010 4:06 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...

wedding dresses,wedding gowns,bride dresses,bridesmaids dresses,evening dresses,bridal gowns,flower girl dresses
Wedding Gowns
Formal Gowns
Cocktail Gowns
Find the wedding dress designer and wedding dress that's right for you! Browse dresses from
Bridesmaid Gowns
Evening Gowns
View our selection of exquisite, handmade gowns and dresses for your wedding
Wedding Dresses, Wedding Shoes and Wedding Accessories from wedding shop, the UK's finest collection of designer wedding dresses.
Use the wedding dress and
cheap wedding
wedding dresses
wedding shop
sd
Left by sbb on Feb 27, 2010 10:11 PM

# re: NHibernate and Castle Active Record (Part 1)

Left by angelae8654 on Mar 02, 2010 12:18 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...

wedding dresses,wedding gowns,bride dresses,bridesmaids dresses,evening dresses,bridal gowns,flower girl dresses
Wedding Gowns
Formal Gowns
Cocktail Gowns
Find the wedding dress designer and wedding dress that's right for you! Browse dresses from
Bridesmaid Gowns
Evening Gowns
View our selection of exquisite, handmade gowns and dresses for your wedding
Wedding Dresses, Wedding Shoes and Wedding Accessories from wedding shop, the UK's finest collection of designer wedding dresses.
Use the wedding dress and
cheap wedding
wedding dresses
wedding shop


fg
Left by sbb on Mar 02, 2010 8:02 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
For some people, there are no such better things that the internet. For them, this would be the excellent way to get many kinds of things. As we all know, there are so many kinds of online stores in the internet. For some of us, links of london charms the online stores would links of london charmsbe the excellent options to spend some money. We wouldn’t have to go anywhere as long as we have the internet connection. We would only need to click the site and try to get the perfect options for them. links of london There are many excellent options that they would be able to get. There are many kinds of things that were provided by many kinds of stores.
Left by ppsdtw on Mar 03, 2010 7:07 PM

# re: NHibernate and Castle Active Record (Part 1)

Left by links of london on Mar 03, 2010 8:14 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Hey, that was interesting,
Left by ucvhost on Mar 06, 2010 2:45 AM

# ugg boots

Requesting Gravatar...
they are very good and useful!!!
ugg outlet
cheap uggs
nike shoes
wholesale watches v
Left by ugg boots on Mar 07, 2010 5:25 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
It’s hard to find knowledgeable people on this topic, but you sound like you know what you’re talking about! Thanks Don’t stop writing, you’ve given me lots of good info! Youtube to MP4 Converter
Convert PDF to image
23
Left by powerpoint on Mar 08, 2010 2:21 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
My hair is just over my ears. I like two kinds of hair styles most. Firstly, use the GHD straightener to make the hair in nature and bouffant style.

Divide the hair into several portions. Use GHD hair straightener to roll them inside towards your ears. Several minutes later, the hair will roll neatly

inside in the branches. Secondly, the active and energetic style with the roll of the direction in the opposite direction can be made similarly with the

formal procedure. All you need to do is to roll the hair outward instead of inward with GHD hair straightener.
It is so simple that you can have your own charming short hair style with GHD straightener uk. Besides the new hair styles, GHD hair straightener can

help you with the puffy hair after you get up which is the annoying thing for many short hair girls.
So as long My hair is just over my ears. I like two kinds of hair styles most. Firstly, use the ghd straighteners to make

the hair in nature and bouffant style. Divide the hair into several portions. Use ghd pink to roll them inside

towards your ears. Several minutes later, the hair will roll neatly inside in the branches. Secondly, the active and energetic style with the roll of the

direction in the opposite direction can be made similarly with the formal procedure. All you need to do is to roll the hair outward instead of inward

with ghd mk5.
It is so simple that you can have your own charming short hair style with GHD straightener uk. Besides the new hair styles,ghd straighteners can help you with the puffy hair after you get up which is the annoying thing for many short hair

girls.
So as long as I have the good tool of ghd pink, no matter what the fashion trend goes of hair styles, I will

stick into my favorite neat short hair.
as I have the good tool of GHD hair straightener, no matter what the fashion trend goes of hair styles, I will stick into my favorite neat

short hair.
Left by ghd pink on Mar 09, 2010 3:29 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
My hair is just over my ears. I like two kinds of hair styles most. Firstly, use the ghd straighteners to make

the hair in nature and bouffant style. Divide the hair into several portions. Use ghd pink to roll them inside

towards your ears. Several minutes later, the hair will roll neatly inside in the branches. Secondly, the active and energetic style with the roll of the

direction in the opposite direction can be made similarly with the formal procedure. All you need to do is to roll the hair outward instead of inward

with ghd mk5.
It is so simple that you can have your own charming short hair style with GHD straightener uk. Besides the new hair styles,ghd straighteners can help you with the puffy hair after you get up which is the annoying thing for many short hair

girls.
So as long as I have the good tool of ghd pink, no matter what the fashion trend goes of hair styles, I will

stick into my favorite neat short hair.
Left by ghd straighteners on Mar 09, 2010 3:32 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
I was very pleased to find this site.I wanted to thank you for this great read!! I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you post.
cheap vps | cheap hosting Nice information..thanks
Left by ucvhost on Mar 10, 2010 11:42 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
Do keep us update with some more updates. mapquest driving directions driving directions usa
Left by usa mapquest on Mar 11, 2010 8:48 AM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
well,I like it
Left by rolex on Mar 11, 2010 7:52 PM

# re: NHibernate and Castle Active Record (Part 1)

Requesting Gravatar...
as all we know
Left by zhennili on Mar 11, 2010 7:57 PM

Your comment:

 (will show your gravatar)
 
Please add 5 and 1 and type the answer here: