public ViewPrompt(ViewPrompt prompt)
		{
			ActionName = prompt.ActionName;
			ControllerName = prompt.ControllerName;
			TextName = prompt.TextName;
			TextKey = prompt.TextKey;
			LocaleId = prompt.LocaleId;
			UpdatedAt = prompt.UpdatedAt;
			UpdatedBy = prompt.UpdatedBy;
			Text = prompt.Text;
		}
        /// <summary>
        /// Initializes a new instance of the <see cref="ViewPromptDocument"/> class.
        /// </summary>
        /// <param name="prompt">The prompt to copy.</param>
        public ViewPromptDocument(ViewPrompt prompt)
        {
            if (prompt == null) throw new ArgumentNullException("prompt");

            ViewPath = prompt.ViewPath;
            UpdatedAt = DateTime.Now;
            UpdatedBy = Thread.CurrentPrincipal.Identity.Name;
            LocaleId = prompt.LocaleId;
            TextKey = prompt.Key.ToString();
            TextName = prompt.TextName;
            Text = prompt.TranslatedText;
        }
		private TextPrompt CreatePrompt(ViewPrompt prompt)
		{
			return new TextPrompt
			       	{
			       		ActionName = prompt.ActionName,
			       		ControllerName = prompt.ControllerName,
			       		LocaleId = prompt.LocaleId,
			       		TextKey = prompt.TextKey,
			       		TextName = prompt.TextName,
			       		TranslatedText = prompt.Text
			       	};
		}
		/// <summary>
		/// Create a new prompt in the specified language
		/// </summary>
		/// <param name="culture">Language that the translation is for</param>
		/// <param name="source">Prompt to use as source</param>
		/// <param name="translatedText">Translated text</param>
		public void CreatePrompt(CultureInfo culture, TextPrompt source, string translatedText)
		{
			if (source.TextKey == null)
				throw new InvalidOperationException("TextKey must be specified for all prompts.");

			var language = GetOrCreateLanguage(culture, culture);
			var dbPrompt = language.Prompts.Where(p => p.TextKey == source.TextKey).FirstOrDefault();
			if (dbPrompt == null)
			{
				_logger.Debug("Created prompt " + source.ControllerName + "." + source.ActionName + "." + source.TextName);
				dbPrompt = new ViewPrompt(source)
				           	{
				           		Text = translatedText,
				           		LocaleId = culture.LCID,
				           	};
				language.Prompts.Add(dbPrompt);
			}
			else
			{
				dbPrompt.Text = translatedText;
			}
			lock (_modifiedDocuments)
			{
				if (!_modifiedDocuments.Contains(language))
					_modifiedDocuments.AddLast(language);
			}
		}
		/// <summary>
		/// Save/Update a text prompt
		/// </summary>
		/// <param name="prompt">Prompt to update</param>
		public void Save(TextPrompt prompt)
		{
			var ourCulture = new CultureInfo(prompt.LocaleId);
			var language = GetOrCreateLanguage(ourCulture, ourCulture);
			var dbPrompt = language.Prompts.Where(p => p.TextKey == prompt.TextKey).FirstOrDefault();
			if (dbPrompt != null)
				dbPrompt.Text = prompt.TranslatedText;
			else
			{
				dbPrompt = new ViewPrompt(prompt);
				language.Prompts.Add(dbPrompt);
			}

			// Can't figure out a better way.
			if (prompt.ActionName == null)
				prompt.ActionName = "Index";

			_logger.Debug("Saving prompt " + prompt.ControllerName + "." + prompt.ActionName + "." + prompt.TextName);
			_documentSession.Store(language);
			_documentSession.SaveChanges();
		}