你怎么去处理阿贾克斯和模型结合当复杂类型的参与?
-
16-09-2019 - |
题
我想保持型结合当做阿贾克斯的电话从我的观点。我在使用 jquery阿贾克斯 使的呼吁,并且只是作为一个例子-这是我的控制方法,我想要呼叫的从阿贾克斯:
public ActionResult Create(Person personToCreate) {
//Create person here
}
正如你可以看到,这种方法是依靠 模型的结合.这使得该方法很多清洁...然而,这意味着,当阿贾克斯打电话,它必须提供所有变量的非空中的数据库。
所以,如果我有一个表叫 Person
已经变量:
firstName varchar(25) not-null
lastName varchar(25) not-null
myPet int not-null <-- This is a foreign key
然后将该实体的框架类, Person
, 创建类似于:
public class Person {
public string firstName { get; set; }
public string lastName { get; set; }
public Pet myPet { get; set; }
}
由于没有一个变量可null(作为指定的DB)这意味着阿贾克斯呼叫必须提供一个 string firstName
, string lastName
, Pet myPet
.但javascript无法提供的宠物...
所以我只有两个选项(就我所知道的):
允许之移到空中的数据库
创建一个"平坦的"级,表示一个人,不需要pet对象...
即:
public class SimplePerson {
public string firstName { get; set; }
public string lastName { get; set; }
public string myPetName { get; set; }
}
该问题与第一个选择是,它似乎很奇怪,有修改的数据库...肯定东西是错误的,因为它允许的事情应该不会...
该问题与第二个选择是,我有很多类似乎广泛的要编写重复课程的每一个只是为了避免这个...如果我有30个课程,这将是30类重复,我将不得不创建以允许对于模型的结合。
任何人都可以想到的任何更好的选择,或得到理由为什么一种选择会比其他的?
解决方案
真正的技巧在这里,是要分开你的视图模型的课程,从实际的模型类。视图模型的课程往往是一个比较简单的,你需要地图,他们回到你的实际类型之前做的现实的东西与他们。工具,如AutoMapper使这相当多的一个单元。
不隶属于 StackOverflow