42、C#:EF框架的:导航属性,加载记录追踪方式(MergeOption),添加内存内容到新上下文(Attach)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xushaozhang/article/details/78789619

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不会产生任何作用。

猜你喜欢

转载自blog.csdn.net/xushaozhang/article/details/78789619