我知道這個主題有很多帖子,但我找不到能幫助我做我想做的事情。我知道我最終會使用Automapper,但在我開始使用它之前,我想學習如何手動執行操作。我想要創建一個ViewModel,通過一個存儲庫來填充來自我的實體的值並將其發送給我的View。就像聽起來那麼簡單,我一直在努力完成它。我使用的是MVC 3,EF 4.3,Database First。我有自動生成我的課程。我張貼有關單位(簡稱/改名爲這個職位)和類,這裏是我到目前爲止有:我如何手動填充ViewModel(不使用AutoMapper!)
聚合實體:航運頭
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的引用)。我只是不知道如何從查詢中獲取值的視圖模型:
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做,再次,是與所有從ShippingHdr行來填充視圖模型實體並將其傳遞給我的視圖。
下面是需要映射的filelds:
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? 那麼我怎麼從我的控制器調用這個動作呢?
我希望我已經提供了足夠的信息,任何幫助將不勝感激。
提示,而不是'可空'你可以去''的DateTime您 –
應該能夠說'選擇新ShippingHeaderSummaryVM {}? ',這是你輸出,而不是使用模型聯編程序輸入? –
@Lavinski,我只是做了一個複製/粘貼的形式,我爲這篇文章生成的實體,我真的不明白爲什麼一些使用Nullable生成而其他人不是。我認爲它會匹配我的SQL表允許爲空,但它沒有。 –