Domanda

Vorrei mantenere vincolante quando si fa chiamate ajax dal mio punto di vista del modello. Sto utilizzando jquery ajax per effettuare le chiamate, e tanto per fare un esempio-questo è il mio metodo di controllo voglio chiamare da Ajax:

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

Come si può vedere, questo metodo si basa su Modello binding . Questo rende il metodo molto più pulito ... tuttavia, questo significa che quando l'Ajax effettua una chiamata, deve fornire tutte le variabili che non sono annullabili nel DB.

Quindi, se ho una tabella chiamata Person che ha variabili:

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

Poi la classe Entity Framework, Person, creato sarebbe simile a:

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

Poiché nessuna delle variabili può essere nullo (come specificato nel DB) ciò significa che la chiamata ajax deve fornire un string firstName, string lastName, Pet myPet. Ma javascript non può fornire al Pet ...

Quindi ho solo due opzioni (che io sappia):

  1. Lasciare myPet ad essere nullo nel DB

  2. Creare una classe "piatto" che rappresenta una persona che non richiede l'oggetto pet ...

vale a dire:

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

Il problema con la prima opzione è che sembra strano dover modificare il DB ... sicuramente qualcosa di sbagliato su di esso perché è permettere cose che non dovrebbe essere ...

Il problema con la seconda opzione è che ho un sacco di classi e sembra vasta di scrivere classi duplicate per ciascuno di essi solo per evitare questo ... Se avessi 30 lezioni, che sarebbe di 30 classi duplicati che ho avrebbe dovuto creare al fine di consentire per il legame modello.

Qualcuno può pensare a tutte le opzioni migliori, o dare un ragionamento sul perché una possibilità potrebbe essere migliore rispetto agli altri?

È stato utile?

Soluzione

Il vero trucco è quello di separare le classi view modello dalle classi del modello attuale. Le classi vista del modello tendono ad essere un po 'più semplice, ed è necessario mappare nuovamente dentro le classi del modello effettivi prima di fare cose reali con loro. Strumenti come automapper rendono praticamente un gioco da ragazzi però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top