Pregunta

Me gustaría mantener la unión al hacer llamadas ajax desde mi punto de vista del modelo. Estoy usando jquery ajax para hacer las llamadas, y al igual que un ejemplo- este es mi método controlador Quiero llamar desde ajax:

public ActionResult Create(Person personToCreate) {
    //Create person here
}

Como se puede ver, este método se basa en Modelo Encuadernación . Esto hace que el método mucho más limpio ... sin embargo, esto significa que cuando el Ajax hace una llamada, deberá suministrar todas las variables que son no anulable en el PP.

Así que, si tengo una llamada Person tabla que tiene variables:

firstName varchar(25) not-null
lastName  varchar(25) not-null
myPet     int         not-null <-- This is a foreign key

A continuación, la clase Entity Framework, Person, creada sería similar a:

public class Person {
   public string firstName { get; set; }
   public string lastName { get; set; }
   public Pet myPet { get; set; }
}

Dado que ninguna de las variables puede ser nulo (como se especifica en la DB) esto significa que la llamada ajax debe suministrar una string firstName, string lastName, Pet myPet. Pero JavaScript no puede suministrar al animal doméstico ...

Así que sólo tengo dos opciones (que yo sepa):

  1. Permitir mypet a ser nulo en el DB

  2. Crea una clase más "plano" que representa a una persona que no requiere el objeto mascota ...

es decir:

public class SimplePerson {
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string myPetName { get; set; }
}

El problema con la primera opción es que parece extraño tener que modificar el DB ... definitivamente algo malo en ello porque está permitiendo que las cosas que no debería ser ...

El problema con la segunda opción es que tengo un montón de clases y parece estar escribiendo extensa clases por duplicado para cada uno sólo para evitar esto ... Si tuviera 30 clases, que sería de 30 clases duplicadas que yo tendría que crear con el fin de permitir la unión modelo.

Puede alguien pensar en cualquier opción mejor, o dar el razonamiento sobre por qué una opción sería mejor que el otro?

¿Fue útil?

Solución

El verdadero truco aquí es separar las clases de vista del modelo de las clases de modelo reales. Las clases de vista del modelo tienden a ser un poco más simple, y es necesario asignar de nuevo en sus clases de modelo reales antes de hacer cosas de verdad con ellos. Herramientas como AutoMapper hacen de este más o menos en un instante sin embargo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top