AdFactum ObjectMapper .NET Blog

Official blog of the AdFactum ObjectMapper .NET

Attribute: [WeakReferenced]

Posted by Gerhard Stephan on November 20th, 2006

The WeakReferenced Abbtribute forces the mapper to use outer joins when joining parent and child table using Virtual Links.

This attribute is always useful if the child property is not a mandatory property of the parent class.

Think about a contact object that has a mandatory firstname and lastname and a salutation enumeration. The salutation enumeration is not mandatory.

    /// <summary>

    /// Descripes a contact

    /// </summary>

    [Table("CONTACTS")]

    public class Contact : ValueObject

    {

        private Salutation salutation;

        private string salutationText;  // get text from db using a virtual link

 

        private string firstName;

        private string lastName;

 

        /// <summary>

        /// Gets or sets the salutation.

        /// </summary>

        /// <value>The salutation.</value>

        public Salutation Salutation

        {

            get { return salutation; }

            set { salutation = value; }

        }

 

        /// <summary>

        /// Gets or sets the salutation text.

        /// </summary>

        /// <value>The salutation text.</value>

        [VirtualLink(typeof(SalutationText), "Value", "Key", "Salutation")]

        public string SalutationText

        {

            get { return salutationText; }

            set { salutationText = value; }

        }

 

        /// <summary>

        /// Gets or sets the name of the first.

        /// </summary>

        /// <value>The name of the first.</value>

        [Required]

        [PropertyLength(50)]

        public string FirstName

        {

            get { return firstName; }

            set { firstName = value; }

        }

 

        /// <summary>

        /// Gets or sets the name of the last.

        /// </summary>

        /// <value>The name of the last.</value>

        [Required]

        [PropertyLength(50)]

        public string LastName

        {

            get { return lastName; }

            set { lastName = value; }

        }

    }

 

The salutation enumeration looks like this:

    /// <summary>

    /// Salutation

    /// </summary>

    public enum Salutation

    {

        None,

       

        DearMr,

        DearMrs,

        MyFriend

    }

 

And last but not least, the text corresponding to that enumeration will be retrieved by a virtual link using database joins.

 

    /// <summary>

    /// Static texts for salutation

    /// </summary>

    [StaticData]

    [WeakReferenced]

    public class SalutationText : ValueObject

    {

        private Salutation  key;

        private string      value;

 

        public Salutation Key

        {

            get { return key; }

            set { key = value; }

        }

 

        public string Value

        {

            get { return value; }

            set { this.value = value; }

        }

    }

 

When selecting the contact the SQL looks like that:

SELECT contacts.*, v1.VALUE AS salutationtext

  FROM contacts LEFT OUTER JOIN salutationtext v1 ON contacts.salutation = v1.KEY

 

If you wouldn’t use the attribute [WeakReferenced] a contact without a filled salutation could not be loaded. 
Because of that issue the attribute is very important.

One Response to “Attribute: [WeakReferenced]”

  1. Official ObjectMapper .NET Blog » Blog Archive » How to build sql queries Says:

    […] If you want further informations about using outer joins, have a look at the blog entry [WeakReferenced]. […]

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>