Ich weiß, dass es viele Beiträge zu diesem Thema gibt, aber ich kann keine finden, die mir helfen zu tun, was ich will. Ich weiß, dass ich irgendwann Automapper benutzen werde, aber bevor ich anfange damit zu spielen, möchte ich lernen, wie man Dinge manuell macht. Ich möchte ein ViewModel erstellen, es mit Werten aus meinen Entitäten über ein Repository füllen und es an meine View senden. So einfach sich das anhört, ich buggle, um es zu schaffen. Ich benutze MVC 3, EF 4.3, Datenbank zuerst. Ich habe meine Kurse automatisch generiert. Ich bin die zuständigen Stellen veröffentlichen (abgekürzt/für diesen Beitrag umbenannt) und Klassen, hier ist das, was ich bisher:Wie bearbeite ich ViewModel manuell (ohne AutoMapper!)
Aggregate Entity: Versand-Header
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; }
}
}
Hier ist mein 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; }
}
}
Hier ist eine Abfrage ich habe die Einzelteile zurückbringen ich mit meinem Ansichtsmodell verwenden möchten, füllen. Ich glaube, der beste Platz dafür ist in einem Repository. Ich habe überprüft, dass es die Daten zurückgibt, die ich mit LinqPad verwenden möchte (daher die fehlende Referenz zu meinem dbContxt). Ich weiß nur nicht, wie die Werte aus der Abfrage an das Ansichtsmodell erhalten:
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
};
Also, was ich tun will, wieder ohne AutoMapper zu verwenden, ist das Ansichtsmodell mit allen Zeilen aus dem ShippingHdr aufzuzufüllen Entität und übergeben Sie es meiner Sicht.
Hier sind die filelds, die zugeordnet werden müssen:
ShippingHeaderSummaryVM von Sendungen
abgebildetID = 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
ich hier stecke. Wie befülle ich das ViewModel aus der Abfrage? Wie rufe ich dann diese Aktion von meinem Controller?
Ich hoffe, ich habe genug Informationen gegeben, jede Hilfe wäre willkommen.
Tip, statt 'Nullable' Sie können einfach gehen '' Datetime –
Sie sollten 'wählen neue ShippingHeaderSummaryVM sagen können {}? ', das wird ausgegeben, anstatt den Modellbinder für die Eingabe zu verwenden? –
@Lavinski, ich habe gerade eine Kopie/Paste-Form meiner generierten Entitäten für diesen Beitrag erstellt, ich verstehe nicht wirklich, warum einige mit Nullable generiert wurden, während andere nicht waren. Ich dachte, es würde passen mit meinen SQL-Tabellen erlauben Null, aber es nicht. –