42、C#:EF框架的:导航属性,加载记录追踪方式(MergeOption),添加内存内容到新上下文(Attach)
2017-12-13 11:26
274 查看
EF很强大,知道一些用法可以很便利地开发。
1.导航属性 --- 主/子表操作
比如apply为父表(主键作为子表的外键(之一)),progress作为子表,那么apply.progress.add(new progress{ ...,....})的方式就是使用apply对象来对子表进行新增操作。这种新增操作无需添加子表的外键(也就是apply的主键),会默认添加,且与子表的主键是否是此外键无关。
注:apply为表对应的变量,并不是表本身名称,progress也是如此。
2.MergeOption --- 设置从数据库加载记录对象后对这些记录对象的追踪方式
context.windopenapplies.MergeOption = MergeOption.NoTracking是将从数据库中捞取的记录对象加载到内存后,对这些记录对象不再追踪,相当于对这些记录对象关闭了数据库,这样可以提升性能,当然,这种做法仅限于查询。如果有增删改,就不能这样,会造成context.savechange()的时候无法更新到数据库中,增删改的时候不用写这句话,直接使用默认设置MergeOption.AppendOnly即可。
注:此枚举dll:System.Data.Entity.dll
3.Attach --- 将非当前上下文内存内容加载到当前上下文中
context.windopenapplies.Attach(apply)是将apply添加到context.windopenapplies的表结构管理中。其中,apply为从数据库中加载到内存中的记录对象,但是却跟当前的context.windopenapplies不在同一个上下文,可以看做独立与数据库之外的记录对象;context.windopenapplies为当前上下文context中的某一个表结构。如果要将独立与当前上下文之外的记录对象添加到数据库,必须首先通过context.windopenapplies.Attach(apply)的方式加载进来,否则后面的context.savechange不会产生任何作用。
1.导航属性 --- 主/子表操作
比如apply为父表(主键作为子表的外键(之一)),progress作为子表,那么apply.progress.add(new progress{ ...,....})的方式就是使用apply对象来对子表进行新增操作。这种新增操作无需添加子表的外键(也就是apply的主键),会默认添加,且与子表的主键是否是此外键无关。
注:apply为表对应的变量,并不是表本身名称,progress也是如此。
2.MergeOption --- 设置从数据库加载记录对象后对这些记录对象的追踪方式
context.windopenapplies.MergeOption = MergeOption.NoTracking是将从数据库中捞取的记录对象加载到内存后,对这些记录对象不再追踪,相当于对这些记录对象关闭了数据库,这样可以提升性能,当然,这种做法仅限于查询。如果有增删改,就不能这样,会造成context.savechange()的时候无法更新到数据库中,增删改的时候不用写这句话,直接使用默认设置MergeOption.AppendOnly即可。
注:此枚举dll:System.Data.Entity.dll
3.Attach --- 将非当前上下文内存内容加载到当前上下文中
context.windopenapplies.Attach(apply)是将apply添加到context.windopenapplies的表结构管理中。其中,apply为从数据库中加载到内存中的记录对象,但是却跟当前的context.windopenapplies不在同一个上下文,可以看做独立与数据库之外的记录对象;context.windopenapplies为当前上下文context中的某一个表结构。如果要将独立与当前上下文之外的记录对象添加到数据库,必须首先通过context.windopenapplies.Attach(apply)的方式加载进来,否则后面的context.savechange不会产生任何作用。
相关文章推荐
- 【2016.3.30项目技术记录】]VS2010自动生成MFC单文档框架程序的修改:去除属性框,在CViewTree类中添加鼠标单击响应
- c#设置xml内容不换行及属性xsi:nil=true的空节点添加
- asp.net(c#)页面加载时添加控件的属性和回车问题
- EF实体框架-从数据库更新模型 一部分表的外键(导航属性)无法显示
- 第五节: EF高级属性(一) 之 本地缓存、立即加载、延迟加载(不含导航属性)
- c#设置xml内容不换行;添加属性为xsi:nil="true"的空节点
- MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
- 《Entity Framework 6 Recipes》中文翻译系列 (24) ------ 第五章 加载实体和导航属性之查询内存对象
- ASP EF框架,实体框架(EntityFramework),ModelFirst,导航属性(一对多的表关系,外键)
- C# 导航属性记录
- c#设置xml内容不换行;添加属性为xsi:nil="true"的空节点
- ASP.NET EF 延迟加载,导航属性延迟加载
- ASP.NET EF 延迟加载,导航属性延迟加载
- MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
- asp.net(c#)页面加载时添加控件的属性和回车问题
- asp.net(c#)页面加载时添加控件的属性和回车问题
- asp.net(c#)页面加载时添加控件的属性和回车问题
- 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性)