/// <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; })); }