0

私は WPF MVVM アプリを作成していますが、データベース Dto オブジェクトからモデル エンティティへのマッピングについて質問があります。

まず、このプロジェクトでは ORM を使用していません (EF や NH など)。つまり、Dto コレクションを返すメソッドを持つ Oracle リポジトリだけがあります。

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 コレクションにマップし、Entity コレクションを INotifyPropertyChanged インターフェイスから継承するモデルに割り当てて、変更が UI に反映されるようにします。

MyDataDto の各識別子の値は、MyDataEntity のプロパティと同じです。したがって、有効な Identifer 値が Toyota の場合、MyDataEntity の列名は Toyota になります。これらの識別子はクエリの where 句で既に指定されているため (そうである必要があります)、どの識別子が取得されるかはわかっています。

だから、私の質問はこれです.データグリッドへのマッピングが簡単になるように、私が示したような醜いエンティティ(列名として識別子を使用)を持っても大丈夫ですか?それとも、より良い、より好ましい方法がありますか?

4

1 に答える 1

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/wpf 初心者に役立ちます

于 2013-05-13T06:13:28.763 に答える