Legacy DB and one-to-one relations

When dealing with a legacy database one often encounters the situation that the database schema defines one-to-one relations between two entities. A typical example might be the following schema fragment

erd

with a one-to-one relation between person and address, that is: each person can have an address and an address can only belong to a single person. To guarantee that a single person can only have zero or one address the foreign key column PersonId in the Address table is set to be unique.

Such a construct is not straight forward to map in NHibernate! I want to show you one possible solution. The solution works but is not free from certain hick-ups! Let's first model the domain

The domain model

model

the code for the above model is straight forward. Nothing magic

public class Person
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual Address Address { get; private set; }
 
    public virtual void AssignAddress(Address address)
    {
        Address = address;
        address.Owner = this;
    }
}
 
public class Address
{
    public virtual int Id { get; set; }
    public virtual string AddressLine1 { get; set; }
    public virtual string AddressLine2 { get; set; }
    public virtual string PostalCode { get; set; }
    public virtual string City { get; set; }
    public virtual Person Owner { get; set; }
}

Note that I have defined the setter method of the Address property in the Person entity as private such as that the consumer of the code is forced to use the AssignAddress method which sets up the bi-directional relation.

The mapping

And now we try to find a working mapping. I use the Fluent NHibernate framework for the mapping (please refer to my previous posts for an introduction to this framework: part 1, part 2, part 3, part 4)

public class PersonMapper : ClassMap<Person>
{
    public PersonMapper()
    {
        LazyLoad();
 
        Id(x => x.Id);
        Map(x => x.FirstName);
        Map(x => x.LastName);
        HasOne(x => x.Address)
            .PropertyRef(p => p.Owner)
            .Cascade.All()
            .FetchType.Join();
    }
}
 
public class AddressMapper : ClassMap<Address>
{
    public AddressMapper()
    {
        LazyLoad();
 
        Id(x => x.Id);
        Map(x => x.AddressLine1);
        Map(x => x.AddressLine2);
        Map(x => x.PostalCode);
        Map(x => x.City);
        References(x => x.Owner)
            .WithUniqueConstraint()
            .TheColumnNameIs("PersonId")
            .LazyLoad()
            .Cascade.None();
    }
}

Unit Tests

What does the above mapping derive as database schema? Let's implement a test. First I have to define what is my model (or: where are my mappings to be found)

public class TestModel : PersistenceModel
{
    public TestModel()
    {
        addMappingsFromAssembly(typeof(Person).Assembly);
    }
}

I then use the following code to generate the schema

[TestFixture]
public class when_creating_the_schema 
{
    [SetUp]
    protected void Context()
    {
        var model = new TestModel();
        var config = new Configuration();
        config.Configure();
        model.Configure(config);
        var factory = config.BuildSessionFactory();
        var session = factory.OpenSession();
        new SchemaExport(config).Execute(true, false, false, false, session.Connection, null);
    }
 
    [Test]
    public void smoke_test()
    {
        true.ShouldBeTrue();
    }
}

when using an SQLite database (in-memory mode) the output generated by the smoke test is

unittestschema

let me reformat the create table scripts a little bit

create table [Person] (
  Id  integer, 
  LastName TEXT, 
  FirstName TEXT, 
  primary key (Id))
  
create table [Address] (
  Id  integer, 
  AddressLine1 TEXT, 
  AddressLine2 TEXT, 
  PostalCode TEXT, 
  City TEXT, 
  PersonId INTEGER unique, 
  primary key (Id))

we can clearly see that the schema created from the model is indeed equal to the schema in the legacy database. Especially note that the PersonId foreign key in the Address table is set to be unique. Now that is a good start...!

Let's see how the creation of a new person with an associated address works (if ever). I have implemented the following unit test

[TestFixture]
public class when_adding_a_new_person_with_an_address : Person_Fixture
{
    private Address address;
    private Person person;
 
    protected override void Context()
    {
        base.Context();
        address = new Address
                      {
                          AddressLine1 = "Some Street 1",
                          PostalCode = "8000",
                          City = "Zurich"
                      };
        person = new Person {FirstName = "Gabriel", LastName = "Schenker"};
        person.AssignAddress(address);
        Session.Save(person);
        Session.Flush();
        Session.Clear();
    }
 
    [Test]
    public void smoke_test()
    {
        true.ShouldBeTrue();
    }
}

in the context I create a new person entity and assign it a new address. Then I save the person, flush and clear the session. The smoke test just verifies that the context can be set up without throwing an exception. Let's run the test and analyze the output

createpersontest

and indeed this works as expected. First a person record is created and the the associated address is created.

Now let's have a look what happens when we query for this person. I add this test to the above test class

[Test]
public void should_add_person_to_database()
{
    var fromDb = Session.Get<Person>(person.Id);
    fromDb.ShouldNotBeNull();
    fromDb.ShouldNotBeTheSameAs(person);
    fromDb.LastName.ShouldEqual(person.LastName);
    fromDb.FirstName.ShouldEqual(person.FirstName);
}

In the first line I load the person entity which I have previously created from database. I then assert that the entity does indeed exist and has the expected properties. The following test output is generated

queryperson

The interesting part is the one outlined by the red rectangle. When I load a person two select statements are generated. One to load the person record and the second to load its associated address.

Problems with this implementation

When loading a single person entity this is no problem but it starts to be a problem when I try to load a list of persons, as I do in the following test

public void can_load_all_persons()
{
    var list = Session.CreateQuery("from Person").List<Person>();
}

the output generated is

querylistofpersons

In this test I have 3 persons (each having an address) in the database. The problem is that although only one select statement is generated for the Person table there are 3 select statements for loading the corresponding addresses. We have a typical select (n+1) problem which is BAD.

A possible solution to avoid the select n+1 problem

A possible solution to this problem is shown below

[Test]
public void can_load_all_persons_revisited()
{
    var list = Session.CreateQuery("select p.Id, p.LastName from Person p").List();
}

here I explicitly select the fields I want to retrieve from database. And indeed the result of the test is only one select statement

querylistofpersons 2

We can use this method when we need a lookup list with all or some persons in the database.

Code

The code accompanying this post can be found here.

Summary

I have shown a possible solution how one can map a one-to-one relation implied by a pre-existing legacy database with NHibernate. For the mapping I have used the Fluent NHibernate framework. There is a select (n+1) problem with this implementation. But this problem can be avoided by using customized queries.

Enjoy.

Blog Signature Gabriel

Print | posted on Tuesday, November 18, 2008 10:17 PM

Comments on this post

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Thank you so much!

Maybe I'm slow, but the this is something I've actually been struggling with since I started using NHibernate.

It's weird because the 1-to-1 mapping pattern is so simple, but I didn't know how to ask for what I was looking for I guess.
Left by James Thigpen on Nov 19, 2008 3:30 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Question: What makes this a Legacy DB Construct? If it were a greenfield application with the same Person/Address relation, would best practices indicate we model it differently? If so, how?
Left by James Thigpen on Nov 19, 2008 4:07 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Thank your efforts! I think my post on the FluentNhibernate discussion group was what prompted you to write this. I can't begin to tell you how much this helped. I particularly liked that you gave an analysis on the pros and cons (1 + N problem) with the approach.
Left by Rob on Nov 19, 2008 4:11 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Can you also show the normal HBM mapping files for this? For those not interested in Fluent NHibernate and it would make the post more complete. Like @James Thigpen I was also looking for a solid example of a one-to-one situation.
Left by MotoWilliams on Nov 19, 2008 7:21 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
@James: in a greenfield app I would probably implement address as a value object. See this post blogs.hibernatingrhinos.com/.../value-objects.aspx
Left by nhibernate on Nov 19, 2008 9:08 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
@nhibernate Makes sense. Thanks for the clarification.
Left by James Thigpen on Nov 20, 2008 8:30 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Thanks Gabriel!

I'm confused as to why we can't pull back these records in a single query though. You specified FetchType = join, shouldn't that mean that a request for a person will join the two tables?


Left by Ben Scheirman on Nov 21, 2008 4:15 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
@Ben: you are right. It IS confusing. And yes, it does join the two tables. But at the end this does not help since each address is still loaded individually again (the select n+1 problem I mentioned)
Left by Gabriel N. Schenker on Nov 21, 2008 5:00 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Hi thanks for the code,
I have a one-2-one relationship situation here, how do I map fluently.

BusinessEntity (Table)
--------------
BusinessEntityId int (auto)

Person (Table)
------
BusinessEntityId int (ref from above table)
FullName varchar(255)

Here BusinessEntity table has auto generated id but person table just have a reference BusinessEntityId from BusinessEntity table.

Table structure based on AdventureWorks2008 database.

How do i map fluently?

Thanks
Ashraf.
Left by Ashraf on Oct 20, 2009 7:59 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
I really like the domain model...it looks pretty awesome!
Left by Work At Home on Oct 21, 2009 11:47 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Good explanation on the One to many relationship in the database, Indeed it is a good revision for every programmer or database admin.
Left by Call Center Software on Nov 07, 2009 12:30 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Presently there is no way in hibernate using which we can specify one-to-one relationship with property-ref to part of composite-id
of another entity.
Left by International Medical Insurance on Nov 07, 2009 12:52 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
A simple one-to-many relationship is creating 3 tables in the DB (like a many-to-many), instead of the 2 tables that used to be created.
Left by Fake Rocks on Nov 07, 2009 1:10 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
You've been kicked a good thing.I think it is a Good explanation on the One to many relationship in the database, Indeed it is a good revision for every programmer or database admin.
Left by http://www.black-jack-bonus.de/ on Dec 03, 2009 5:02 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Happy to see your blog as it is just what I’ve looking for and excited to read all the posts.
Left by autism sign on Dec 17, 2009 11:40 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Specialized information... It could be a very good support for some projects on this subject or even the field. Just a bit developed and it could serve as a presentation for a specialized conference. Many variants... In general I am delightened with such specialists who create all these frameworks... Bravo!
Left by managed care jobs on Dec 22, 2009 6:42 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
I really like the domain model...it looks pretty awesome!v
Left by pandora jewelry on Dec 24, 2009 11:48 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
I must say, greatest tips and guidelines!
Left by Website design company on Dec 30, 2009 8:05 AM

# But why does this happen?

Requesting Gravatar...
This post was referred to in answer to my question on stackoverflow

stackoverflow.com/.../nhibernate-createquery-an...

The problem i am facing is slightly different. Am getting n+1 queries if i use HQL. But if i use Criteria i am getting one query which joins all the tables.

My issue is, why does it even bother to fetch the queries? I am not accessing them. And as per the documentation, it shouldnt fire the queries till i access them.
Left by Amith on Jan 13, 2010 2:57 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...

I just couldnt leave your website before saying that I really enjoyed the quality information you offer to your visitors... Will be back often to check up on new stuff you| post!
Left by cucci on Jan 16, 2010 9:10 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Considerably, the article is in reality the greatest on this noteworthy topic. I agree with your conclusions and will eagerly look forward to your next updates. Saying thanks will not just be sufficient, for the wonderful clarity in your writing. I will immediately grab your rss feed to stay privy of any updates. Pleasant work and much success in your business dealings!
Left by weight loss pills on Jan 17, 2010 9:06 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
very pleasure to visit this site. nice post.
Left by pc satellite tv on Jan 21, 2010 8:36 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
I have been burning my head over this problem for quite a long time. I was not at all able to sort out what the real issue was with the Legacy DB until I read this post. You have done a good work by explaining how to make full use of the process.
Left by Sample Storage on Jan 26, 2010 3:34 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
The one to one relation between the legacy DB is quite well explained here. The part which I'm feeling doubt is with the mapping process, I'm not able to make proper use of the mapping.
Left by Predictive Dialer on Jan 26, 2010 3:51 AM

# re: Legacy DB and one-to-one relations

Left by 25th Wedding Anniversary on Feb 02, 2010 10:56 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
nice post!
Left by UGG sale on Feb 07, 2010 10:23 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
I have been burning my head over this problem for quite a long time. I was not at all able to sort out what the real issue was with the Legacy DB until I read this post. You have done a good work by explaining how to make full use of the process. download sherlock holmes
download it's complicated
download everybody's fine
download armored
top movie downloads
movie downloads
download edge of darkness
download when in rome
download tooth fairy
Left by Astey on Feb 08, 2010 5:02 AM

# re: Legacy DB and one-to-one relations

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

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Thanks for sharing. i really appreciate it that you shared with us such a informative post..
Online Law Degree | Online Natural science degree | Online Fire Sciences degree | political science degree | Online social service school
Left by siomy on Feb 09, 2010 10:03 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
I've been looking at D6 schema a the schema module and very interested in the idea of providing automated node scaffolding for custom node types. The idea is that a single module can provide the db scaffolding for node insert, update, delete, delete revision, etc. by simply inspecting the node's schema. As a test I added this code to schema module - its not complete 
Left by Casino giochi on Feb 18, 2010 6:55 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
The mapping process seems to be the confusing part for some people, but otherwise, this is a great article. Thanks
Left by LASIK Facts on Feb 19, 2010 4:38 AM

# re: Legacy DB and one-to-one relations

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

# Tibia Gold

Requesting Gravatar...
Do you knowTibia Gold?if you play the online game,you will knowTibia coinsis the game gold. In the game,if you had moreTibia money,you will had a tall level. But if you wantbuy Tibia Gold ,you can come here and spend a little money to boughtTibia credits.Quickly come here.
Left by Tibia Gold on Feb 24, 2010 1:37 PM

# discount ed hardy women long sleeve shirts sales online

Requesting Gravatar...
YS0225A5 If you think you are , you are! If 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:54 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 this ugg broome boots!To measure time from sleep I rose to sleep,To measure space I pastured on surprise 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 10:37 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 e 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 time.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 10:39 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 yo 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 happen 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 10:41 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
I was cheching an Argentina travel guide and Mendoza seems to be one of the best places to visit in this time of the year.
Left by Argentina real estate on Feb 25, 2010 5:41 AM

# discount christian louboutin sandals online sales

Requesting Gravatar...
YS0226A1 That your heart has been brokenear the words,I'm here, 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 2:58 PM

# discount women's ugg elsey boots 5596 sales online

Requesting Gravatar...
YS0226A2 If I were a boy agn, I would practice perseverance more often, and never 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:02 PM

# discount Women's ugg adirondack boots II sales online

Requesting Gravatar...
YS0226A3 Hold fast to drms.For if dreams die. Life is a broken-winged 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:06 PM

# discount reebok nfl jerseys online sales

Requesting Gravatar...
YS0226A4 A true frd is someone who reaches for 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:10 PM

# discount ugg sienna miller boots 5818 sales online

Requesting Gravatar...
YS0226A9 Unwearied sti, lover by lover,They paddle in the cold,Companionable 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:13 PM

# discount mens air jordan shoes 13 online sales

Requesting Gravatar...
YS0226A10 When are old and gray and full of sleep,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:24 PM

# discount louis vuitton damier canvas handbags online sales

Requesting Gravatar...
YS0226A11 Surroundg you are angels,They are there to guide 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 3:27 PM

# re: Legacy DB and one-to-one relations

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
asd
Left by sbb on Feb 27, 2010 10:07 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
I just couldnt leave your website before saying that I really enjoyed the quality information you offer to your visitors... Will be back often to check up on new stuff you| post!
Left by auto insurance on Feb 28, 2010 5:04 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Legacy DB and one-to-one relations decribes clearly,people can understand easilyclassifieds |jobs|iphone repair
Left by iphone repair on Feb 28, 2010 7:13 PM

# re: Legacy DB and one-to-one relations

Left by tomw on Mar 02, 2010 7:39 AM

# re: Legacy DB and one-to-one relations

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


c
Left by sbb on Mar 02, 2010 8:00 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
this is a great article. Thanks
Left by ucvhost on Mar 06, 2010 2:21 AM

# ugg boots

Requesting Gravatar...

they are very good and useful!!!
ugg outlet
cheap uggs
nike shoes
wholesale watches 852136565
Left by ugg boots on Mar 07, 2010 5:45 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Hi, I hope you can get rid of the blatant spam here. The spammers are really starting to piss genuine commentators.
Left by Shrink films on Mar 08, 2010 3:48 AM

# re: Legacy DB and one-to-one relations

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
32rx
Left by powerpoint on Mar 08, 2010 2:23 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
f32 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
s
Left by powerpoint on Mar 08, 2010 2:31 PM

# re: Legacy DB and one-to-one relations

Left by nowGoogle.com adalah Multiple Se on Mar 09, 2010 9:32 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Thanks for sharing valuable information.
Best Windows VPS Hosting by ucvhost
If you choosing for the best windows vps | cheap vps | windows hosting | Cheap Hosting | Forex Vps hosting service, you need to hunt for those virtual private servers that can run as isolated processes while being part of a Web Server, and provide you complete privacy and root access as the VPS owner. You should also ask for CPU resources, guaranteed bandwidth, memory, and disk space, to make the most of your chosen Windows VPS hosting service. Thanks ucvhost
Left by ucvhost on Mar 10, 2010 1:55 AM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Firstly I will talk about UGG boots' Origin. cheap ugg boots has been created in Australia during the First World War, by the Australian pilot, who wrapped in sheep's clothing with two feet into the shoes to protect from the cold weather. Then it gradually became popular in Australia. Initially the name came in, called ugg boots sale which means ugly shoes. Later, Australians nicknamed it ugg boots deutschland. Until moutiaolu mou tiao jie 1994, an American registered the trademark of UGG Australia, and began to produce UGG boots in a large scale. Today, ugg Australia is a very popular brand in the world.
Left by cheap ugg on Mar 10, 2010 6:45 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
Firstly I will talk about UGG boots' Origin. cheap ugg boots has been created in Australia during the First World War, by the Australian pilot, who wrapped in sheep's clothing with two feet into the shoes to protect from the cold weather. Then it gradually became popular in Australia. Initially the name came in, called ugg boots sale which means ugly shoes. Later, Australians nicknamed it ugg boots deutschland. Until 1994, an American registered the wo xiaode le .trademark of UGG Australia, and began to produce UGG boots in a large scale. Today, ugg Australia is a very popular brand in the world.
Left by cheap ugg on Mar 10, 2010 6:56 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
thankS!
Left by rolex on Mar 11, 2010 2:01 PM

# re: Legacy DB and one-to-one relations

Requesting Gravatar...
thank you! I like that!
Left by rolex on Mar 11, 2010 2:54 PM

Your comment:

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