Я пишу приложение MVVM WPF и задаю вопрос о сопоставлении объектов базы данных Dto с объектами модели.Отображение Dto для Entity для использования DataGrid
Прежде всего, я не использую ОРМ для этого проекта (EF или NH и т.д.) - так что есть только Oracle Repository с помощью методов, которые возвращают DTO Collections т.е.
private IList<MyDataDto> LoadData(){
...
}
MyDataDto может выглядеть следующим образом :
public class MyDataDto
{
public DateTime? MyDate { get; set; }
public string Identifier { get; set; }
public decimal? Value { get; set; }
}
MyDataEntity может выглядеть следующим образом:
public class MyDataEntity
{
public DateTime? MyDate { get; set; }
public decimal? Toyota { get; set; }
public decimal? Honda { get; set; }
public decimal? Nissan { get; set; }
public decimal? Mazda { get; set; }
}
и мою модель, как так:
public class MyModel : INotifyPropertyChanged
{
private IEnumerable<MyDataEntity> modelData;
public IEnumerable<MyDataEntity> ModelData
{
get { return modelData; }
set
{
modelData= value;
OnPropertyChanged("ModelData");
}
}
//other stuff in here but not shown for brevity
}
У меня есть планировщик работает Quartz и в этой работе он запрашивает базу данных и пользовательский картограф отображает коллекцию DTO в коллекцию сущностей, а затем присваивает коллекцию Entity к модели, которая наследуется от интерфейса INotifyPropertyChanged так изменения отражены в моем пользовательском интерфейсе.
Каждое значение идентификатора в MyDataDto равно значению свойства MyDataEntity. Поэтому, если допустимым значением Identifer является Toyota, имя столбца в MyDataEntity будет Toyota. Эти Идентификаторы уже указаны в запросе where clause (они должны быть), поэтому я знаю, какие идентификаторы будут извлечены, и это вряд ли изменится (крайне маловероятно!)
Итак, мой вопрос в том, хорошо ли это иметь уродливую сущность, как я показал (с идентификаторами как имена столбцов), так что сопоставление с datagrid очень просто или есть лучший, более предпочтительный способ?
Я должен сказать, что MyDataDto в основном так же, как, каким образом данные хранятся в базе данных, так что это просто очень простой траверс Копание набор данных для заполнения DTO – raydenl
I должен также сказать, если неясно, что дататус имеет дату в виде заголовка строки и идентификаторы в качестве заголовков столбцов. – raydenl
Вы уверены, что изменения отражены в пользовательском интерфейсе? Например. С вашей реализацией я бы подумал, что если вы изменили десятичную? свойства вашего DataEntity, он не будет обновляться, так как класс не реализует INPC, а ваш класс Model не обертывает ваш Entity – failedprogramming