私の視点からajax呼び出しを行うときは、モデルのバインドを維持したいと思います。私はjqueryajaxを使用して呼び出しを行っていますが、例として、これはajaxから呼び出したいコントローラーメソッドです。
public ActionResult Create(Person personToCreate) {
//Create person here
}
ご覧のとおり、このメソッドはモデルバインディングに依存しています。これにより、メソッドが非常にクリーンになります...ただし、これは、ajaxが呼び出しを行うときに、DBでnull許容でないすべての変数を提供する必要があることを意味します。
Personしたがって、変数を持つというテーブルがある場合、次のようになります。
firstName varchar(25) not-null
lastName varchar(25) not-null
myPet int not-null <-- This is a foreign key
Personその場合、作成されるEntityFrameworkクラスは次のようになります。
public class Person {
public string firstName { get; set; }
public string lastName { get; set; }
public Pet myPet { get; set; }
}
(DBで指定されているように)どの変数もnullにできないため、これはajax呼び出しで、、、を指定する必要があることを意味string firstNameしstring lastNameますPet myPet。しかし、javascriptはペットを供給することができません...
したがって、私には2つのオプションしかありません(私が知っていること):
DBでmyPetをnullにできるようにする
ペットオブジェクトを必要としないPersonを表す「よりフラットな」クラスを作成します。
すなわち:
public class SimplePerson {
public string firstName { get; set; }
public string lastName { get; set; }
public string myPetName { get; set; }
}
最初のオプションの問題は、DBを変更しなければならないのは奇妙に思えるということです...それは、あるべきではないことを許可しているので、間違いなくそれについて何か間違っています...
2番目のオプションの問題は、クラスがたくさんあり、これを回避するために、それぞれに重複するクラスを作成することは広範囲に及ぶように思われることです... 30のクラスがある場合、それは30の重複するクラスになります。モデルのバインドを可能にするために作成します。
誰かがより良いオプションを考えたり、あるオプションが他のオプションよりも優れている理由を説明したりできますか?