この件に関する投稿がたくさんあることは知っていますが、自分がやりたいことをするのに役立つ投稿が見つかりません。最終的に Automapper を使用することはわかっていますが、実際に使用する前に、手動で行う方法を学びたいと考えています。ViewModel を作成し、リポジトリを介してエンティティからの値を入力し、View に送信したいと考えています。これは簡単なことのように聞こえますが、私はそれを成し遂げるのに苦労しています。MVC 3、EF 4.3、データベース ファーストを使用しています。クラスを自動生成しました。関連するエンティティ(この投稿では省略/名前変更)とクラスを投稿しています。これまでのところ、次のとおりです。
集約エンティティ: 出荷ヘッダー
using System;
using System.Collections.Generic;
namespace My.Models
{
public partial class ShippingHdr
{
public ShippingHdr()
{
this.ShippingLI = new HashSet<ShippingLI>();
}
public int ID { get; set; }
public int ShipToSiteID { get; set; }
public Nullable<System.DateTime> DateShipped { get; set; }
public Nullable<System.DateTime> EstDeliveryDate { get; set; }
public string FromSitePOC { get; set; }
public Nullable<int> ShipperID { get; set; }
public string TrackingNo { get; set; }
public string Comments { get; set;}
public virtual Shippers Shippers { get; set; }
public virtual ICollection<ShippingLI> ShippingLI { get; set; }
}
}
これが私のViewModelです
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace My.Models.ViewModels
{
public class ShippingHeaderSummaryVM
{
public int ID { get; set; }
public string Site { get; set; }
public Nullable<System.DateTime> DateShipped { get; set; }
public Nullable<System.DateTime> EstDeliveryDate { get; set; }
public string TrackingNo { get; set; }
public string HeaderComments { get; set; }
public string Shipper { get; set; }
public int NumOrders { get; set; }
public string Site { get; set; }
}
}
これは、ビューモデルに入力するために使用したいアイテムを返すクエリです。これに最適な場所はリポジトリにあると思います。LinqPad を使用して必要なデータが返されることを確認しました (したがって、dbContxt への参照がありません)。クエリから ViewModel に値を取得する方法がわかりません。
var shipments = from h in c.ShippingHdrs
where (h.ShippingLI.Count > 1)
join
e in c.vHr_Employees on h.CreatedBy equals e.ID
join
s in c.Shippers on h.ShipperID equals s.ShipperID
join
r in vAaiomsSites on h.ShipToSiteID equals r.SiteID
select new
{
h.ID,
r.Site,
h.EstDeliveryDate,
h.DateShipped,
h.TrackingNumber,
h.HeaderComments,
e.LastName,
h.ShippingLI.Count,
s.Shipper
};
そこで、ここでも Automapper を使用せずに、ViewModel に ShippingHdr エンティティのすべての行を入力し、それをビューに渡します。
マップする必要があるフィールドは次のとおりです。
出荷からマッピングされた ShippingHeaderSummaryVM
ID = h.ID
Site = r.Site
DateShipped = h.DateShipped
EstDeliveryDate = h.EstDeliveryDate
TrackingNo = h.TrackingNumber
FromSitePOC = e.LastName
NumOrders = h.ShippingLI.Count
Shipper = s.Shipper
HeaderComments = h.HeaderComments
私はここで立ち往生しています。クエリから ViewModel を作成するにはどうすればよいですか? 次に、コントローラーからそのアクションを呼び出すにはどうすればよいですか?
十分な情報を提供できたことを願っています。