1

いくつかのフィールドを持つ1つのエンティティと、このような1つのコレクションがあるとしましょう

Entity
int Id {get; set;}
string Name {get; set;}
string Title {get; set;}
List<Order>Orders {get; set;}

Order
int Id {get; set;}
string Name {get; set;}
Entity Entity {get; set;}

ここで、両方のエンティティからいくつかのプロパティのみを表す EntityOrderViewModel を作成したいと考えています。このような

EntityOrderViewModel
int Id {get; set;}
string EntityName {get; set;}
string EntityTitle {get; set;}
string OrderName {get; set;}
int OrderId {get; set;}

EntityOrderViewModel(Entity x)
{
   Id = 1; 
   EntityName = x.Name; 
   EntityTitle = x.Title;
   foreach(Order order in x.Orders)
   {
      OrderName = order.Name;
   }
}

public static List<EntityOrderViewModel> FromMyDomain(IList<Entity> x)
{
    List<EntityOrderViewModel> vm= new List<EntityOrderViewModel>();

    foreach (Entity e in x)
    {
        vm.Add(new EntityOrderViewModel(e));
    }
    return vm;
}

コントローラーから、このようなすべてのエンティティを呼び出したい

//opensession
   // open transaction
      List<Entity> data = session.Query<Entity>().ToList();
   //end transaction
      transaction.commit();
//end session      
      return EntityOrderViewModel.FromMyDomain(data);
4

1 に答える 1

0

コントローラーにセッションがあるので、ビューモデルを直接ハイドレートしてみませんか?

from entity in session.Query<Entity>()
join order in session.Query<Order> join entity.EntityId on order.Entity.EntityId
select new EntityOrderDTO // or anon 
{
  EntityId = entity.EntityId,
  Name = entity.Name,
  OrderName = order.OrderName
}

join はあなたの n+1 を処理します

于 2012-05-29T07:39:35.030 に答える