拆分式新增
开发工具与关键技术:Visual Studio 2015 对一个新增流程的拆分
作者:廖 茂
撰写时间:2019年07月20日
在做项目时,增改删查必不可少,但平时需要做的增改删查一般难度不大,就熬比如新增,一般都是一次性在一个方法里面把数据给新增到数据库,在这里,我要给大家分享一个特别的新增,首先看一下表结构,如下:
可以看到,在这个新增中,要同时新增四张表。在这里,新增一个订单,就会对应的新增一个联系人,会新增多位旅客,新增多个订单明细,因为一个订单需要有一个联系人,可以有一位或多位旅客,有一个或多个订单明细。由于订单和联系人都是新增一个,所以可以直接获取值,但旅客可以有多个,所以在这里就通过for循环来逐一获取多条数据,所以,数据获取的方法不同,也就不能把新增的数据一次性全部传到控制器,只能分开成两个方法,订单和联系人的数据用一个post方法传到控制器,旅客和订单明细的数据就在for循环里面再用一个post方法传到控制器。我们先编写订单和联系人的新增方法,如下:
上图为订单和联系人的新增,把新增订单和联系人所需要的数据传到控制器中,接下来到控制器中编写新增方法,如下:
先实例化订单表和联系人两张表,从视图中传过来的数据对应两张表中的字段,这样两张实例化的表中对应的字段中就有从视图中传过来的值。在这里先新增订单,先通过第一个为大写字母C,加上当前日期,再加上用五位数字随机生成的字符串拼接生成订单编号,以订单编号为依据,查询数据库中是否存在相同的订单编号,如果存在就返回“生成订单失败,请重新生成!”的提示,如果不存在,就开始设置订单表中的字段的值,如下:
设置一下订单表里面“订单状态、订单类型、订票方式”等字段的值,订单日期就是获取当前日期,然后把当前日期作为订单日期存入数据库,接下来保存订单到数据库并且新增联系人,如下:
在保存订单的时候,判断保存数据的行数是否大于零,如果不大于零,就返回“订单生成失败,请重新生成订单”的提示,如果大于零,就获取新增订单的订单ID,把订单ID存进session中便于后面新增旅客和订单明细时使用,接着就新增联系人,设置一下联系人这张表中的订单ID等于新增订单的订单ID,然后新增联系人,把联系人保存到数据库中。接着再回到视图中,从之前新增订单和联系人的post方法之后开始编写新增旅客和订单明细的方法,先通过for循环获取到旅客信息,如下:
由于是通过for循环来获取的数据,所以id和name都有一个尾缀,从零开始自增,通过这种方式获取多条旅客数据,旅客的数据有“旅客姓名、旅客类型、证件类型、证件号、出生日期、携带人”,由于在这里的旅客分为成人、儿童、婴儿三种,数据库中ID分别为1、2、3,并且每种旅客的数据组成都不相同,成人的数据由“姓名、旅客类型、证件类型、证件号”组成;儿童的数据由“姓名、旅客类型、证件类型、证件号、出生日期”组成;婴儿的出生日期由“姓名、旅客类型、出生日期、携带人”组成,所以for循环中每执行一次所获取的数据的组成部分都是不相同的,所以传递数据也要以旅客类型为依据用三个不同的post方法进行传递,如下:
判断如果旅客类型的值为1,就传递成人的数据组成部分;如果为2,就传递儿童的数据组成部分;如果为3,就传递婴儿的数据组成部分,可以看到,数据传递之前,是先把数据封装在一个变量里面进行传递的,以便于在控制器中判断传递过来的数据是成人的数据、还是儿童的数据、或者是婴儿的数据,数据传递到控制器了,接下来到控制器编写新增旅客和订单明细的方法,如下:
在控制器中接收从视图中传过来的数据,并且实例化需要新增数据的“旅客信息表”和“订单明细表”,接下来就需要先获取前面新增订单时的订单ID,如下:
因为在前面已经把新增的订单的ID存进session里面,所以可以直接从session中提取,接下来就需要判断需要新增的数据是哪一个参数里面的数据,如下:
判断如果存放成人数据的参数不为空,就以“;”为依据分割参数,然后把里面的数据赋值给实例化的旅客信息表中对应的属性,如下面旅客姓名的赋值:
sTraveller.TravellerName = FirstData[0];
判断如果存放儿童数据的参数不为空,就分割存放儿童数据的参数;如果存放婴儿的参数不为空,就分割存放婴儿的参数。无论判断到哪一个参数有值,都要将其分割,并且把里面的数据赋值给实例化的旅客信息表中对应的属性,最后在保存实例化的旅客信息表,在这里需要判断,如果保存数据的条数不大于零,就返回“订单生成失败,请重新生成订单”的提示,如果保存到数据库中的数据条数大于零,就获取新增的旅客的ID,并且赋值给实例化的订单明细表中对应的属性,同时还要把前面获取到的订单ID赋值给实例化的订单明细表中对应的属性,最后新增订单明细表,并且保存到数据库中,如下:
这样方法就编写完了,下面来看一下执行完新增的数据库中的数据,如下:
订单表:
订单明细表:
联系人信息表:
旅客信息表:
拆分式新增就是没办法实现一次性新增所有需要新增的表,只能分为两次或多次进行新增,这不仅需要我们弄清楚新增表格数据的顺序,还要判断哪些数据是可以一次性新增完毕,哪些需要分开新增的。