Pergunta

Eu gostaria de manter modelo de ligação ao fazer chamadas Ajax da minha vista. Estou usando jquery ajax para fazer as chamadas, e apenas como um exemplo- este é o meu método de controlador Eu quero chamar de ajax:

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

Como você pode ver, este método está contando com Modelo Encadernação . Isso faz com que o método muito mais limpo ... no entanto, isto significa que, quando o Ajax faz uma chamada, ele deve fornecer todas as variáveis ??que são não-nulo no DB.

Então, se eu tiver uma tabela chamada Person que tem variáveis:

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

Então, o Entity Framework classe, Person, criada seria semelhante a:

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

Uma vez que nenhuma das variáveis ??pode ser nulo (conforme especificado no DB) Isto significa que a chamada ajax deve fornecer um string firstName, string lastName, Pet myPet. Mas javascript não pode fornecer o Pet ...

Então, eu só tenho duas opções (que eu saiba):

  1. Permitir mypet ser nulo na DB

  2. Crie uma classe "mais plana" que representa uma pessoa que não requer o objeto pet ...

ou seja:

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

O problema com a primeira opção é que parece estranho ter que modificar o DB ... definitivamente algo errado sobre isso, porque ele está permitindo que as coisas que não deveriam estar ...

O problema com a segunda opção é que eu tenho um monte de aulas e parece extensa estar escrevendo aulas duplicados para cada um apenas para evitar isso ... Se eu tivesse 30 classes, que seriam 30 aulas duplicados que eu teria que criar, a fim de permitir a ligação modelo.

Alguém pode pensar em quaisquer opções melhores, ou dar raciocínio sobre por que uma opção seria melhor que o outro?

Foi útil?

Solução

O verdadeiro truque aqui é separar suas aulas vista modelo das classes de modelo reais. As aulas vista modelo tendem a ser um pouco mais simples, e você precisa mapeá-los de volta para suas classes de modelo reais antes de fazer coisas reais com eles. Ferramentas como AutoMapper fazer esta praticamente uma pressão embora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top