当前位置: 代码迷 >> ASP.NET >> MVC,实体保存有关问题
  详细解决方案

MVC,实体保存有关问题

热度:5297   发布时间:2013-02-25 00:00:00.0
MVC,实体保存问题
实体Index,属性有ID,Content,CreateDate

实体Detail,属性有ID,IndexID,CargoName

其中,实体Detail中的IndexID是外键。Detail和Index是多对一关系。

问题,我先描述一下。
若只需要保存Index的数据,那么视图上放3个对应的控件,名称与字段名一致,保存时序列化成ID=1&Content=2&CreateDate=2012-08-15,传入控制器中。
而控制器中的保存方法,参数是Index实体的实例。会将序列化数据转换成Index实体,而后只需要新增该实体即可。
如:
JScript code
function saveIndex() {        if ($('#fm').valid()) {            $.post(url, $("#fm").serialize() + '&' + $("#fm").serializeDisabled(), function (result) {                if (result.success) {                    $.messager.alert('提示', '数据已保存!');                    javascript: $('#dlg').dialog('close')                    $('#dg').datagrid('reload'); // 刷新数据                } else {                    $.messager.alert('提示', '数据保存出现错误!', 'error');                }            }, 'json');        }    }


C# code
/// <summary>        /// 新建-保存        /// </summary>        /// <param name="company"></param>        /// <returns></returns>        [HttpPost]        public ActionResult Create(Index index)        {            try            {                IndexRepository.Insert(index);                return Json(new { success = true });            }            catch (Exception e)            {                return Json(new { msg = "服务出现错误." });            }        }


但是现在,视图中的控件,不仅仅是Index实体的,也有Detail实体的(就是那个CargoName)。
我希望控制器中的保存方法中的参数是Index index,List<Detail> detail,然后先新增index,返回新增后的主键ID,再循环赋值给detail中的IndexID字段,最后新增detail。

关键问题,js中还是把控件序列化,再传入控制器吗?
如果是这样,那控制器中该怎么写?如果不是,请问js和控制分别该怎么写?

以及怎么获得“刚新增”的记录的主键ID?

分不多,只有40分,希望能有人帮助我解开这个疑惑。先谢谢了。

------解决方案--------------------------------------------------------
你可以搞一个综合性的实体来接受,单独定义一个,根据你的需要

当你
db.BIF.AddObject(model);
db.SaveChanges();
之后,该model已经更新

此时model.ID就是刚刚插入的ID
------解决方案--------------------------------------------------------
单独的model,如果是EF的话,完全可以用映射来的表模型,不必创建

如果有特殊需要,那么可以考虑创建一个符合需求的Model,你比如说,有张表,字段太多,那么我的需求是更新其中 的某几个字段,那么可以搞一个小型的Model,保证页面在提交请求时的模型最小话

当然,如果一个页面涉及到多个实体模型,那么可以采用综合性model的方式,也可以分成不同的表单,然后分别提交,互不影响,都是以个人需求而定
  相关解决方案