2013-05-07 2 views
0

Я пишу приложение 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 очень просто или есть лучший, более предпочтительный способ?

+0

Я должен сказать, что MyDataDto в основном так же, как, каким образом данные хранятся в базе данных, так что это просто очень простой траверс Копание набор данных для заполнения DTO – raydenl

+0

I должен также сказать, если неясно, что дататус имеет дату в виде заголовка строки и идентификаторы в качестве заголовков столбцов. – raydenl

+0

Вы уверены, что изменения отражены в пользовательском интерфейсе? Например. С вашей реализацией я бы подумал, что если вы изменили десятичную? свойства вашего DataEntity, он не будет обновляться, так как класс не реализует INPC, а ваш класс Model не обертывает ваш Entity – failedprogramming

ответ

0

Это то, что я в конечном итоге делает:

public class MyDataEntity 
{ 
    public DateTime? MyDate { get; set; } 

    public IDictionary<Identifier, decimal?> IdentifierType { get; set; } 
} 

public enum Identifer 
{ 
    Toyota, 
    Honda, 
    Nissan, 
    Mazda 
} 

и в моем XAML:

<TextBlock Text="{Binding IdentifierType[Toyota]}" /> 

мой картографа заботится о переходе от DTO модели сущность и результат делает мою модель намного более аккуратно и прекрасно работает!

Надеюсь, это поможет другим XAML/МОФ недоносков

Смежные вопросы