Cuando desarrolle una aplicación ASP.NET MVC que permita actualizar el modelo, necesita alguna forma de saber cómo tomar el modelo de vista actualizado y volver a compararlo con el modelo que ahora está actualizado. Parece que hay algunas formas diferentes de hacer esto y me pregunto si alguno de estos no es MVC adecuado (al igual que hacer que su controlador almacene datos que deberían estar en el modelo no es MVC adecuado).
Todos los modelos de vista tienen una identificación: Pros
- Siempre asegúrese de que pueda combinar con su modelo.
Contras
- Debe tener mucho cuidado de que ninguno de los ID se haya cambiado; de lo contrario, puede hacer que los usuarios actualicen las filas a las que no deberían tener acceso.
Solo los modelos con vista mínima mínima tienen una identificación: Pros
- Se necesita mucho menos control para evitar que los usuarios actualicen datos a los que no deberían acceder.
Contras
- Mucho más difícil de rastrear qué modelos de vista coincide con qué modelo.
- Todavía tiene que verificar los pocos modelos de vista con ID para asegurarse de que el usuario no esté actualizando datos a los que no debería tener acceso.
Ningún modelo de vista tiene ID:
Pros
- No es necesario verificar las ID para obtener actualizaciones.
Contras
- Tienes que abandonar la apatridia.
Entonces tengo dos preguntas.
Primero, ¿hay una elección correcta / incorrecta? (Si no, eso significa que la elección es una cuestión de opinión y mi segunda pregunta está basada en la opinión y debe ignorarse).
En segundo lugar, si hay una elección correcta / incorrecta, ¿cuál es?
Para aclarar un comentario, estoy hablando cuando tiene un modelo de vista que es una imitación de su objeto de base de datos.
Piensa esto:
public class InvoiceViewModel //Does not have ID, does not relate to model.
{
public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model.
public AddressViewModel BillingAddressVM { get; set; } //Ditto
public AddressViewModel ShippingAddressVM { get; set; } //Ditto
public List<InvoiceLineItemViewModel> ItemVMs { get; set; } //Each one has an ID?
}
no esta:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}
fuente
You have to abandon statelessness.
- Acabas de elegir utilizar MVC sin sentido.Respuestas:
El objeto ViewModel no es lo que se almacena en una tabla de base de datos, en general. Son los elementos individuales en el objeto ViewModel que se almacenan. Cada uno de esos artículos ya tiene una identificación.
Por ejemplo:
Como no hay una sola tabla en la base de datos que corresponda a un InvoiceViewModel, no hay ID para un objeto InvoiceViewModel.
Por supuesto, siempre puede usar el InvoiceID como id para este ViewModel en particular. InvoiceID es útil, porque eso es lo que este objeto representa en última instancia. Pero pude ver que tengo un objeto ViewModel que no corresponde a ningún ID en particular en la base de datos.
fuente
De manera predeterminada, debe tener una identificación a la vista aunque no la esté usando. Cree una columna en la base de datos denominada como
id
y marque laauto increment
función sobre ella para que se ordene.fuente