q我吧

Silverlight WCF RIA Services 复合层次结构操作

首先介绍一下复合层次的定义:

利用 WCF RIA Services,您可以为属于复合层次结构的数据类创建应用程序逻辑,这些层次结构包含由“具有”关系关联的类,其中包含对象(整体或父)控制着被包含对象(部分或子代)的创建和生命周期。例如,SalesOrderHeader实体具有 SalesOrderDetail 实体,因为有关订单的详细信息只作为订单的一部分存在。为了阐明这一点,可以对照类的子类型化来看类的组件:子类型化包括通过给比较宽泛的类型(交通工具)添加详细信息来创建比较具体的类型(小轿车)。这样就会导致在继承层次结构中详细(派生)类仍可被视为泛型(基)类,因为从这个例子来看,小轿车“(仍然)是”是交通工具。

在定义了相关类之间的复合关系之后,可以针对作为单个单元(而不是需要作为多个单独实体)的多个实体来执行数据修改操作。这会简化中间层逻辑,因为您可以为整个层次结构编写应用程序逻辑,而不是需要将该逻辑拆分,以应用于每个实体并尝试在数据操作期间协调该拆分逻辑。[引自MSDN]

简单一点,就是一对多的关系,如用户表,用户角色表,角色表,一个用户对应着多个用户角色关系,一个角色对应着多个用户角色关系,[个人理解]

 

在实体的层次结构中,一个实体被称为父实体,其他相关实体被称为子代实体。父实体是表示数据的类,它是子代实体中数据的单个根。例如,SalesOrderHeader 实体是父实体,SalesOrderDetail 是子代实体。SalesOrderHeader 实体中的单个记录可以链接到 SalesOrderDetail 实体中的几个记录。

数据类是层次结构关系的一部分,通常具有以下特征:

实体之间的关系可以表示为树状结构,其中子代实体连接到单个父实体。子代实体可以扩展为任意数目的级别。

子代实体的生存期包含在父实体的生存期内。

子代实体在父实体的上下文外没有有意义的标识。

对实体的数据操作要求将这些实体作为单个单元处理。

例如,在子代实体中添加、删除或更新记录要求在父实体中做相应更改。[引自MSDN]

通过将 CompositionAttribute 特性应用到表示实体之间的关联的属性,定义实体之间的复合关系.注意的是:若要在查询结果中包含子实体,必须使用[Include]属性把子实体包含进来,

下面介绍一下在域服务中操作复合层次结构

在父实体中查询子实体,不可单独查询子实体,

插入父实体时必须先父实体中添加子实体,完成后才能提交,

如有以下几张表,模块表,角色表,角色模块关系表,

添加模块必须指定角色,有访问权限的角色,

添加顺序是:先实例化模块对象,先添加角色集合,再添加模块对象,

最后提交,

删除的顺序是,先循环删除该模块对应的模块角色集合,再删除模块,最后提交,

修改则顺序没什么影响,总之提交操作是在最后,并且只有一次,

时间有点仓促,没来及上代码,有空会把代码补上的,

原则:

可以将数据修改操作添加到子代实体,但是允许对子代实体的操作受允许对父实体的操作影响。
如果对父实体允许更新,则允许对子代实体进行更新、插入和删除。
如果父实体具有已命名的更新方法,则所有子代必须启用更新。
如果对父实体允许插入或删除,则允许对子代实体递归进行相应的操作。[MSDN]



 

 

posted @ 2011-05-10 00:01  渲起浪花  阅读(507)  评论(0编辑  收藏  举报