Я пытаюсь решить эту проблему в приложении WPF с дизайном MVVM.Мне нужно вернуть при доступе к базе данных больше «данных»:
- сообщения о результате
- возвращаемое значение
- и, если база данных была успешной
Поэтому я создаю интерфейс для возвращаемого типа, вот он:
public interface IResult<T>
{
bool IsSuccess { get; set; }
string ResultMessage { get; set; }
T ReturnValue { get; set; }
}
Этот интерфейс реализует некоторый класс:
public class DbResult: IResult<IList<Archive>>
{
public bool IsSuccess{ get; set;}
public string ResultMessage{ get; set;}
public IList<Archive> ReturnValue { get; set; }
}
Метод в классе при доступе к базам данных имеет тип возврата IResult<Archive>
, Архивэто класс сгенерированный с помощью LINQ TO SQL.:
public interface IArchiveDbManager
{
IResult<Archive> LoadConversationTo(string nick, DateTime toDt);
}
[Export(typeof(IArchiveDbManager))]
public partial class ArchiveDbManager : IArchiveDbManager
{
public IResult<Archive> LoadConversationTo(string nick, DateTime toDt)
{
var result = new DbResult();
try
{
var query = from m in _dc.Archive
where m.Nick == nick
where m.Time <= toDt
orderby m.Time
select m;
result.ReturnValue = query.ToList();
if (query.Count() == 0)
{
result.ResultMessage = "For the specified search criteria found no record in the database.";
result.IsSuccess = false;
}
else
{
result.ResultMessage =
string.Format("For the specified search criteria found {0} record in the database.", query.Count());
result.IsSuccess = true;
}
return result;
}
catch (Exception exception)
{
throw exception;
}
}
}
Класс ArchiveDbManager внедряется с MEF в классе модели представления.
У меня есть вопрос:
Как правильно решить эту проблему в MVVM?Сценарий - модель представления, созданная с помощью доступа ArchiveDbManager к базе данных, например, если таблица базы данных пуста, класс ArchiveDbManager возвращает сообщение «Архив пуст», а модель представления показывает это сообщение в представлении пользователю.
Правильно создать отчет о результатах поиска в базе данных в «классе ArchiveDbManager (это класс доступа к базе данных)»
Что вы думаете об этом решении?