Sé que hay una gran cantidad de mensajes sobre el tema, pero no puedo encontrar uno que me ayuda a hacer lo que quiero. Sé que eventualmente usaré Automapper, pero antes de comenzar a jugar con él, quiero aprender a hacer las cosas manualmente. Quiero crear un modelo de vista, rellenarlo con los valores de mis entidades a través de un repositorio y enviarlo a mi punto de vista. Tan simple como suena, estoy luchando para lograrlo. Estoy usando MVC 3, EF 4.3, Base de datos primero. He autogenerado mis clases. Estoy poniendo las entidades competentes (abreviada/renombrado para este post) y clases, esto es lo que tengo hasta ahora:¿Cómo poblar manualmente ViewModel (No usar AutoMapper!)
agregado Entidad: Cabecera de envío
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; }
}
}
Aquí está mi modelo de vista
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; }
}
}
Aquí es una consulta que tengo que devolver los artículos que desea utilizar para rellenar mi modelo de vista con. Creo que el mejor lugar para esto es en un repositorio. Verifiqué que devuelve los datos que quiero usando LinqPad (de ahí la referencia que falta a mi dbContxt). Sólo que no sé cómo llegar a los valores de la consulta al modelo de vista:
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
};
Así que lo que quiero hacer, de nuevo sin usar AutoMapper, es poblar el modelo de vista con todas las filas de la ShippingHdr entidad y pasarlo a mi punto de vista.
Éstos son los filelds que necesitan ser asignada:
ShippingHeaderSummaryVM asignada desde envíos
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
estoy atascado aquí. ¿Cómo pueblan el modelo de vista de la consulta? ¿Cómo puedo llamar esa acción desde mi controlador?
espero haber dado suficiente información, cualquier ayuda se agradece.
Consejo, en lugar de 'anulable' sólo puede ir '' DateTime –
Usted debe ser capaz de decir 'select nueva ShippingHeaderSummaryVM {}? ', ¿esta es su salida en lugar de usar la carpeta modelo para la entrada? –
@Lavinski, acabo de copiar/pegar las entidades generadas para esta publicación, realmente no entiendo por qué algunas se generaron con Nullable mientras que otras no. Pensé que coincidiría con mis tablas de SQL permiten nulo pero no lo hizo. –