Beispiel #1
0
        /// <summary>
        /// Delete the given QnAKnowledgeBase in the database, and call EFQnARepository
        /// to delete the knowledgebase on QnAMaker.ai
        /// </summary>
        /// <param name="id">knowledgeid in database</param>
        /// <returns></returns>
        public async Task <bool> DeleteQnAKnowledgeBaseByIdAsync(int id)
        {
            var b = await db.QnAKnowledgeBase.FirstOrDefaultAsync(X => X.QnAKnowledgeBaseId == id);

            var q = await db.QnABaseClass.FirstOrDefaultAsync(X => X.QnAId == b.QnABotId);

            var pairs = await db.QnAPairs.Where(x => x.KnowledgeBaseId == b.QnAKnowledgeBaseId).ToListAsync();

            //var r = await qnaRepository.DeleteKnowledgeBase(q, b);
            // First remove the knowledgebase
            db.Remove(b);
            if (await db.SaveChangesAsync() > 0)
            {
                // then remove all pairs we might have
                if (pairs.Count() > 0)
                {
                    db.RemoveRange(pairs);
                    await db.SaveChangesAsync();
                }
                // Fetch conversations and messages
                var conversations = await db.Conversations.Where(x => x.KnowledgebaseId == id).ToListAsync();

                var messages = new List <Message>();
                // If there was any conversations
                if (conversations.Count() > 0)
                {
                    // Loop trough them and get all the messages
                    foreach (Conversation c in conversations)
                    {
                        var m = await db.Messages.Where(x => x.ConversationId == c.ConversationId).ToListAsync();

                        messages.AddRange(m);
                    }
                    // Remove the messages
                    db.RemoveRange(messages);
                    await db.SaveChangesAsync();

                    // Remove the conversations
                    db.RemoveRange(conversations);
                    await db.SaveChangesAsync();
                }
                // Finally delete the knowledgebase at QnAMaker.ai
                var r = await qnaRepository.DeleteKnowledgeBase(q, b);

                if (r)
                {
                    return(true);
                }
                else
                {
                    return(true); // If this happens, the knowledgebase is deleted localy
                }
            }                     // but not at QnAMaker.ai
            else
            {
                return(false); // Failed to delete knowledgebase in db
            }
        }