Business Logic Toolkit for .NET
www.bltoolkit.net
|  Home   |  Download   |  Documentation   |  Discussions   |  License   |

  Source.Mapping.Association.cs

 
using System;

using JNotNull = JetBrains.Annotations.NotNullAttribute;

namespace BLToolkit.Mapping
{
    using Common;
    using Reflection;

    public class Association
    {
        public Association(
            [JNotNull] MemberAccessor memberAccessor,
            [JNotNull] string[]       thisKey,
            [JNotNull] string[]       otherKey,
                       string         storage,
                       bool           canBeNull)
        {
            if (memberAccessor == null) throw new ArgumentNullException("memberAccessor");
            if (thisKey        == null) throw new ArgumentNullException("thisKey");
            if (otherKey       == null) throw new ArgumentNullException("otherKey");

            if (thisKey.Length == 0)
                throw new ArgumentOutOfRangeException(
                    "thisKey",
                    string.Format("Association '{0}.{1}' does not define keys.", memberAccessor.TypeAccessor.Type.Name, memberAccessor.Name));

            if (thisKey.Length != otherKey.Length)
                throw new ArgumentException(
                    string.Format(
                        "Association '{0}.{1}' has different number of keys for parent and child objects.",
                        memberAccessor.TypeAccessor.Type.Name, memberAccessor.Name));

            _memberAccessor = memberAccessor;
            _thisKey        = thisKey;
            _otherKey       = otherKey;
            _storage        = storage;
            _canBeNull      = canBeNull;
        }

        private MemberAccessor _memberAccessor;
        public  MemberAccessor  MemberAccessor { get { return _memberAccessor; } set { _memberAccessor = value; } }

        private string[] _thisKey;
        public  string[]  ThisKey { get { return _thisKey; } set { _thisKey = value; } }

        private string[] _otherKey;
        public  string[]  OtherKey { get { return _otherKey; } set { _otherKey = value; } }

        private string _storage;
        public  string  Storage { get { return _storage; } set { _storage = value; } }

        private bool _canBeNull;
        public  bool  CanBeNull { get { return _canBeNull; } set { _canBeNull = value; } }

        public static string[] ParseKeys(string keys)
        {
            return keys == null ? Array<string>.Empty : keys.Replace(" ", "").Split(',');
        }
    }
}
 
© 2010 www.bltoolkit.net
support@bltoolkit.net