我想保持型结合当做阿贾克斯的电话从我的观点。我在使用 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无法提供的宠物...

所以我只有两个选项(就我所知道的):

  1. 允许之移到空中的数据库

  2. 创建一个"平坦的"级,表示一个人,不需要pet对象...

即:

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

该问题与第一个选择是,它似乎很奇怪,有修改的数据库...肯定东西是错误的,因为它允许的事情应该不会...

该问题与第二个选择是,我有很多类似乎广泛的要编写重复课程的每一个只是为了避免这个...如果我有30个课程,这将是30类重复,我将不得不创建以允许对于模型的结合。

任何人都可以想到的任何更好的选择,或得到理由为什么一种选择会比其他的?

有帮助吗?

解决方案

真正的技巧在这里,是要分开你的视图模型的课程,从实际的模型类。视图模型的课程往往是一个比较简单的,你需要地图,他们回到你的实际类型之前做的现实的东西与他们。工具,如AutoMapper使这相当多的一个单元。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top