今天讲讲怎么用EF建立实体之间的对应关系,以及对应的数据库操作,首先看看实体,这个也是项目中碰到的问题。
FUNC_SS_MODULE表有连个关系,一个是自身对应关系,一个是和SS_FUNC的对应关系。那么接下来我们看看这个自身一对多和外部一对多是怎么建立的。
先看看自身一对多,FUNC_SS_MODULE表中有两个字段C_MODUL_ID和C_FATHERID,我不用说,大家都能才出来一个是子模块一个是父模块。看看数据表
看见了吧,废话不多说,我们看看关系的建立
ok,我们再看看它们的依赖关系
就这么简单,建成了自身的一对多关系。即一个C_FATHER_ID对应多个C_MODULE_ID。看看程序是怎么实现和运用的。因为SubModule是一个集合
所以我们得到一个父Id的时候,根据父ID我们就能轻而易举的获取父Id对应的所有子Id。
List<Func_SS_MODUL> subModule =
new List<Func_SS_MODUL>(ssModul.SubModule);
其中ssModul是父模块对象。通过这种方式我们就得到了子模块,无需编程根据父模块去找子模块,这就是关系的方便之处。接下来我们再看看外部一对多。
再看看依赖关系
看看程序是怎么实现的。
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);
}
{
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表。怎么样很简单吧。篇幅有限,谁想了解多对多请联系我。
本文转自 BruceAndLee 51CTO博客,原文链接:http://blog.51cto.com/leelei/347228,如需转载请自行联系原作者