Я хотел бы сохранить привязку модели при выполнении вызовов ajax с моей точки зрения. Я использую jquery ajax для выполнения вызовов, и просто в качестве примера - это мой метод контроллера, который я хочу вызвать из ajax:
public ActionResult Create(Person personToCreate) {
//Create person here
}
Как видите, этот метод основан на привязке модели . Это делает метод намного чище ... однако это означает, что когда ajax выполняет вызов, он должен предоставить все переменные, которые не могут быть обнулены в БД.
Итак, если у меня есть таблица с именем Person
, в которой есть переменные:
firstName varchar(25) not-null
lastName varchar(25) not-null
myPet int not-null <-- This is a foreign key
Тогда созданный класс Entity Framework, Person
, будет выглядеть так:
public class Person {
public string firstName { get; set; }
public string lastName { get; set; }
public Pet myPet { get; set; }
}
Поскольку ни одна из переменных не может быть нулевой (как указано в БД), это означает, что вызов ajax должен предоставить string firstName
, string lastName
, Pet myPet
. Но javascript не может обеспечить питомца ...
Так что у меня есть только два варианта (о которых я знаю):
Разрешить myPet быть нулевым в БД
Создать «более плоский» класс, представляющий человека, которому не нужен объект питомца ...
т
public class SimplePerson {
public string firstName { get; set; }
public string lastName { get; set; }
public string myPetName { get; set; }
}
Проблема с первым вариантом заключается в том, что кажется странным, что нужно изменить БД ... определенно что-то не так с этим, потому что он допускает вещи, которых не должно быть ...
Проблема со вторым вариантом заключается в том, что у меня много классов, и кажется, что я пишу дублирующие классы для каждого из них, просто чтобы избежать этого ... Если бы у меня было 30 классов, это было бы 30 дублирующих классов, которые я придется создать для того, чтобы разрешить привязку модели.
Может ли кто-нибудь придумать какие-нибудь лучшие варианты или аргументировать, почему один вариант лучше другого?