2

UI にバインドされる EF エンティティとサロゲート型などのエンティティを操作する方法について問題があります。

次のクラスがあるとします

    // Db Entity
    public class Car
    {
        public virtual int Id { get; set; }
        public string ChassisNumber { get; set; }
        public virtual string Brand { get; set; }
        public virtual string Name { get; set; }
    }

    // Surrogate type that reflects some properties of Car entity
    // This class will be bound to UI
    public class SurrogateCar
    {
        public string Brand { get; set; }
        public string Name { get; set; }
    }

今、私は db から取得し、自分のエンティティを表すList<Car>を作成したいと考えています。List<SurrogateCar>これはさまざまな方法で簡単に実行できます。そのうちの 1 つを次のようにします。

      List<Car> cars = CarTable.GetMyCars(); // Just a dummy method, suppose it returns all entities from Db.

      List<SurrogateCar> surrogates = new List<SurrogateCar>();

      foreach (var car in cars)
      {
           surrogates.Add(new SurrogateCar { Brand = car.Brand, Name = car.Name });
      }

または、カスタム キャスト メソッドを作成することもできます。ただ、気になるのは演出です。このメソッドは頻繁に呼び出されるため、リストを作成して 1 つずつ入力することは、潜在的な問題のように思えます。

これを行うためのより良い方法はありますか、またはこのように使用しても問題ありませんか?

ありがとう。

4

3 に答える 3

2

Web サービスがあり、そのサービスが常に SurrogateCar クラスを返す場合、不要なクラスを取得するのではなく、必要なクラスを返すようにエンティティ クエリを記述できます。

var cars = from c in context.Cars where {your condition}
           select new SurrogateCar
           {
               Brand=c.Brand,
               Name=c.Name
           };

一方、常に車のリストが必要な場合は、Roger が指摘したように AutoMapper が最適です。電話するだけ

  CreateMap<Car, SurrogateCar>

次に、Automapper を使用して新しいリストを作成します。

  surrogates.AddRange(Map<IEnumberable<Car>, IEnumerable<SurrogateCar>>(cars));
于 2012-07-11T13:56:58.127 に答える
1

ボトルネックであることが実際に測定されるまでは、パフォーマンスについて心配する必要はありません。おそらく、異なるタイプ間のこれらのマッピングはそれほど遅くはありません。

AutoMapper http://automapper.org/など のツールがありますが、主な目的はパフォーマンスではありませんが、コードをより簡単に、より少なく書くことができる可能性があります。

于 2012-07-11T13:21:42.923 に答える
0

あなたが本当に探しているのはAutoMapperだと思います。これにより、この状況に沿って記述されたシームレスで簡単なコードが可能になります。あなたが気にする必要がない限り、パフォーマンスについてはあまり心配しません。

これは、オートマッパーを使用したリストのマッピングに関する SO です。

于 2012-07-11T13:18:05.663 に答える