今天讲讲怎么用EF建立实体之间的对应关系,以及对应的数据库操作,首先看看实体,这个也是项目中碰到的问题。
asp.net EF+MVC2实战2_第1张图片
FUNC_SS_MODULE表有连个关系,一个是自身对应关系,一个是和SS_FUNC的对应关系。那么接下来我们看看这个自身一对多和外部一对多是怎么建立的。
先看看自身一对多,FUNC_SS_MODULE表中有两个字段C_MODUL_ID和C_FATHERID,我不用说,大家都能才出来一个是子模块一个是父模块。看看数据表
asp.net EF+MVC2实战2_第2张图片
看见了吧,废话不多说,我们看看关系的建立
asp.net EF+MVC2实战2_第3张图片
ok,我们再看看它们的依赖关系
asp.net EF+MVC2实战2_第4张图片
就这么简单,建成了自身的一对多关系。即一个C_FATHER_ID对应多个C_MODULE_ID。看看程序是怎么实现和运用的。因为SubModule是一个集合
所以我们得到一个父Id的时候,根据父ID我们就能轻而易举的获取父Id对应的所有子Id。
List subModule = new List(ssModul.SubModule);
其中ssModul是父模块对象。通过这种方式我们就得到了子模块,无需编程根据父模块去找子模块,这就是关系的方便之处。接下来我们再看看外部一对多。
asp.net EF+MVC2实战2_第5张图片
再看看依赖关系
asp.net EF+MVC2实战2_第6张图片
看看程序是怎么实现的。
if (funcList.Count == 0)
                                {
                                        ssNewFunc.C_FUNC_ID = Guid.NewGuid().ToString().Replace( "-","");
                                        ssNewFunc.C_FUNC_TP = ssFuncTp.C_FUNCTP;
                                        ssNewFunc.C_FUNC_TPNM = ssFuncTp.C_FUNCTP_NAME;
                                        ssNewFunc.C_LASTMODIFIER = base.GetSession().C_USER_ID;
                                        ssNewFunc.C_OWNED_DEPT = base.GetSession().C_ORGA_ID;
                                        ssNewFunc.C_OWNER = base.GetSession().C_USER_ID;
                                        ssNewFunc.D_CREATE_DATE = DateTime.Now;
                                        ssNewFunc.D_LASTMODIFY = DateTime.Now;
                                         string cModuleId = ssFunc.C_MODUL_ID.Equals("") ? CONS_ROOT_ID : ssFunc.C_MODUL_ID;
                                        ssNewFunc.Func_SS_MODUL = funcEntities.SS_MODUL.First(m => m.C_MODUL_ID == cModuleId);
                                        funcEntities.AddToSS_FUNC(ssNewFunc);
                                        funcEntities.SaveChanges();
                                        strJson = "{suc:1,msg:'保存模块功能成功'}";
                                        log.Info( "保存模块功能成功");
                                         return Json(strJson);
                                }
通过指定Func_SS_MODUL 我们在保存ssNewFunc的时候,系统会根据关系自动将对应的模块Id保存到SS_FUNC表。怎么样很简单吧。篇幅有限,谁想了解多对多请联系我。