/// <summary>
        /// Saves the extrenal element content.
        /// </summary>
        /// <returns>Task</returns>
        /// <param name="obj">Object.</param>
        private async Task SaveContent(T obj)
        {
            //Serialize the content
            string content = obj.Content.ToString();

            ExternalElementContentMapping contentMapping;

            if ((contentMapping = await GetExternalElementContentMappingAsync(obj.UID, obj.GetType().ToString())) == null)
            {
                contentMapping = new ExternalElementContentMapping()
                {
                    ExtUID = obj.UID,
                    //save the serialized data directly in the mapping
                    SerilizedContent = content,
                    ExtType          = obj.GetType().ToString(),
                    ContentType      = obj.Content.GetType().ToString()
                };
            }
            else
            {
                contentMapping.SerilizedContent = content;
                contentMapping.ContentType      = obj.Content.GetType().ToString();
            }

            //save the mapping to the database
            Mapper <ExternalElementContentMapping> contentMapper = new Mapper <ExternalElementContentMapping>(_dbFilePath);
            await contentMapper.SaveAsync(contentMapping);
        }
        /// <summary>
        /// Get object T given the UID.
        /// </summary>
        /// <returns>The object T.</returns>
        /// <param name="UID">UID.</param>
        public override async Task <T> GetAsync(int UID)
        {
            //get the base ExternalElement
            T obj = await base.GetAsync(UID);

            SQLiteConnection conn = await ConnectToTableAsync <ExternalElementContentMapping>();

            return(await Task.Run(() =>
            {
                string typeOfT = typeof(T).ToString();
                TableQuery <ExternalElementContentMapping> query = conn
                                                                   .Table <ExternalElementContentMapping>()
                                                                   .Where(mapping => mapping.ExtUID == obj.UID
                                                                          &&
                                                                          mapping.ExtType == typeOfT);

                if (query.Count() != 1)
                {
                    throw new NoSingleMappingFound();
                }

                ExternalElementContentMapping contentMapping = query.First();
                conn.Close();
                obj.Content = Activator.CreateInstance(Type.GetType(contentMapping.ContentType), new object[] { contentMapping.SerilizedContent }) as IContent;

                return obj;
            }));
        }
        private async Task <ExternalElementContentMapping> GetExternalElementContentMappingAsync(int extUID, string extType)
        {
            SQLiteConnection conn = await ConnectToTableAsync <ExternalElementContentMapping>();

            return(await Task.Run(() =>
            {
                ExternalElementContentMapping eeMapping = conn
                                                          .Table <ExternalElementContentMapping>()
                                                          .Where(mapping => mapping.ExtUID == extUID && mapping.ExtType == extType).FirstOrDefault();
                conn.Close();
                return eeMapping;
            }));
        }