XAF中多对多关系 (XPO)

In this lesson, you will learn how to set relationships between business objects. For this purpose, the Task business class will be implemented and a Many-to-Many relationship will be set between the Contact and Task objects. You will also learn the basics of automatic user interface construction for the referenced objects.

在本课中,您将学习如何设置业务对象之间的关系。为此,将实现 Task 业务类,并在"联系人"和"任务"对象之间设置多对多关系。您还将学习引用对象的自动用户界面构造基础知识。

  • To add the Task business class to the application, you can use the Task class from the Business Class Library. Since you need to set a relationship between the Contact and Task objects, you need to customize the Task class implementation. Inherit from this class and add the Contacts collection property, as shown in the following code.
  • 要将 Task 业务类添加到应用程序,可以使用 Business 类库中的"任务"类。由于您需要设置"联系人"和"任务"对象之间的关系,因此需要自定义 Task 类实现。从此类继承并添加"联系人"集合属性,如以下代码所示。
     
    using DevExpress.ExpressApp.Model;
    // ...
    [DefaultClassOptions]
    [ModelDefault("Caption", "Task")]
    public class DemoTask : Task {
        public DemoTask(Session session): base(session) { }
        [Association("Contact-DemoTask")]
        public XPCollection<Contact> Contacts {
            get {
                return GetCollection<Contact>(nameof(Contacts));
            }
        }
    }
    Important

    Do not modify the XPCollection property declaration demonstrated above. Manipulating the collection or introducing any additional settings within the declaration may cause unpredictable behavior.

    重要
    不要修改上面演示的 XPCollection 属性声明。操作集合或在声明中引入任何其他设置可能会导致不可预知的行为。

    In this code, the AssociationAttribute is applied to the XPCollection type Contacts property, representing the collection of associated Contacts. The Association attribute is required when setting a relationship between objects. Note that the Contacts property getter implementation - the GetCollection method - is used to return a collection.

在此代码中,关联属性应用于 XPCollection 类型"联系人"属性,表示关联联系人的集合。设置对象之间的关系时,需要关联属性。请注意,联系人属性 getter 实现 - GetCollection 方法 - 用于返回集合。

Note

The ModelDefaultAttribute attribute, which is applied to the DemoTask class, specifies the "Task" value for the Caption property of the Application Model‘s BOModel | DemoTask node. Generally, you can specify any property of the Application Model‘s BOModel | <Class> or BOModel | <Class> | OwnMembers | <Member> node, by applying the ModelDefault attribute to a business class or its member.

注意
应用于 DemoTask 类的模型默认属性属性为应用程序模型的 BOModel 的 Caption 属性指定"Task"值 |演示任务节点。通常,您可以指定应用程序模型的 BOModel 的任何属性 |<Class>或 BOModel |<Class>*自己的会员 |<Member>节点,通过将 ModelDefault 属性应用于业务类或其成员。

  • Modify the Contact class implementation: add the Tasks property as the second part of the Contact-DemoTask relationship. Note that the Association attribute must be applied to this property as well. The following code demonstrates a code snippet from the Contact class implementation.
  • 修改联系人类实现:将 Tasks 属性添加为联系人-演示任务关系的第二部分。请注意,关联属性也必须应用于此属性。以下代码演示了联系人类实现的代码段。
     
    [DefaultClassOptions]
    public class Contact : Person {
        //...
        [Association("Contact-DemoTask")]
        public XPCollection<DemoTask> Tasks {
            get {
                return GetCollection<DemoTask>(nameof(Tasks));
            }
        }
    }

    The code above will automatically generate the required intermediate tables and relationships.

上述代码将自动生成所需的中间表和关系。

Note

If you have CodeRush

注意
如果您有代码CodeRush

  • installed, you can use Code Templates when implementing business classes. Using Code Templates decreases code creation time, because it helps avoid having to type the entire code manually and allows you to create regular code sections with only a few keystrokes. To learn about the built-in Code Templates for eXpress Persistent Objects, refer to the XPO and XAF Templates topic.
  • Run the WinForms or ASP.NET application. Invoke the Contact Detail View or Task Detail View. Add tasks to a Contact object‘s Tasks collection, or contacts to a Task object‘s Contacts collection. To apply the assignment, use the Link button that accompanies these collections.
  • 在实现业务类时,可以使用代码模板。使用代码模板可缩短代码创建时间,因为它有助于避免手动键入整个代码,并允许您只需几个击键即可创建常规代码部分。要了解 eXpress 持久对象的内置代码模板,请参阅 XPO 和 XAF 模板主题。
  • 运行 WinForms 或ASP.NET应用程序。调用联系人详细信息视图或任务详细信息视图。将任务添加到"联系人"对象的"任务"集合,或将联系人添加到"任务"对象的"联系人"集合中。要应用分配,请使用这些集合附带的链接按钮。

You can see the code demonstrated in this lesson in the Contact.cs (Contact.vb) and DemoTask.cs (DemoTask.vb) files of the Main Demo installed with XAF. The MainDemo application is installed in %PUBLIC%\Documents\DevExpress Demos 19.2\Components\eXpressApp Framework\MainDemo by default. The ASP.NET version is available online at http://demos.devexpress.com/XAF/MainDemo/

您可以在本课中演示的代码,请参阅与 XAF 一起安装的主演示的Contact.cs (Contact.vb) 和DemoTask.cs (DemoTask.vb) 文件中。默认情况下,主演示应用程序安装在 %PUBLIC%\Documents\DevExpress Demos 19.2\Components\eXpressApp Framework\MainDemo by default. The ASP.NET version is available online at http://demos.devexpress.com/XAF/MainDemo/ 中。ASP.NET版本可在 http://demos.devexpress.com/XAF/MainDemo/ 在线获取

.

.

原文地址:https://www.cnblogs.com/foreachlife/p/Many-to-ManyRelationship.html

时间: 2024-10-11 09:08:51

XAF中多对多关系 (XPO)的相关文章

数据库中多对多关系及其实现

事物A中的一条记录可以对应事物B中的多条记录,而事物B中的一条记录也可以对应事物A中的多条记录.例如:学校中,一个班级可以有多名任课老师,而一名老师可以教多个班级.这时,可以引入一个表C来模拟多对多关系. SQL语句: --班级表 create table banji ( banji_id int primary key, banji_num int not null, banji_name nvarchar(100) ) --教师 create table jiaoshi ( jiaoshi_

关于hibernate中多对多关系

关于多对多关系 数据库:在使用多对多的关系时,我们可以使用复合主键.也可以不使用,直接引入外键同样可以实现. 在数据库中使用多对多关系时,需要一个中间表. 多对多关系中的数据库结构如下: 表:Orders 字段:orderid(主键)..... 表:Users 字段:usersid(主键),.... 中间表: cy_order_user 字段:cy_order_user主键id 外键:cy_orderid(引入Orders表) 外键:cy_usersid(引入Users表) 注意:中间表的外键是

Hibernate中多对多关系转换

问题来源 在运用SSH架构开发Web应用时,总会遇到表之间一对多.多对一.多对多等等的关系,而对于多对多的关系,在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型:hibernate会为我们创建中间关联表,转换成两个一对多. 问题解决 在此用开发OA项目时角色表和权限之间的多对多关系提供解决问题的建议 例子:角色与权限 (1)先看需求 (2)分析 第一,角色与权限:多对多 一个角色可以有多个权限,一个权限可以被多个角色使用 第二,在角色的增删改查中涉及到了

数据库表中多对多关系怎么设计?

(多对多关系)(视频下载) (全部书籍) 马克-to-win:Teacher表:两列id,name.Studnet表: 三列:id,name,ageTeacherStudent表(关系表):三列:id,tid,sid create table TeacherStudent(id int not null,tid int not null,sid int not null); 2) teacher and student:(一个老师可能有多个学生,一个学生可能有多个老师) qixy有两个学生:li

SQL Server中多对多关系的实现

多对多的关系必须另外添加一张表来表示 --班级 create table banji ( banji_id int constraint PK_banji primary key, --主键 banji_num int not null, banji_name nvarchar(20) ) --教师 create table jiaoshi ( jiaoshi_id int constraint PK_jaioshi primary key, --主键 jiaoshi_name nvarchar

MyBatis中多对多关系的映射和查询

先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用 中间表 连接 图书表 和 图书类别表,图书表中 没有使用外键关联 图书类别表 而是在中间表中引用了 图书主键 和 类别主键 通过中间表来 表示 图书 和 图书类别 的关系 建立图书表(图书编号,图书名字) create table book ( bid int primary key auto_increment, bname varchar(20)

Qt中多对多关系类调用

之前一直做C的开发,什么东西都是自己想出来自己实现,很少去找已经实现的类库,最近做一个管理Led灯的程序.用C的思路实现功能简单,但是健壮就遇到了不少问题,想通过数据结构来解决,发现Qt中正好有这种想要的数据结构. 之前是QLinkedList, 后来发现list需要实现operator==类的运算符重载我也不记得了. 采用QMultiMap正好符合我的使用场景,还不用费工夫实现运算符重载,真是省心啊,哈哈. 越来越喜欢面向对象了.

在thinkphp中,写的博文标签多对多关系的标签频率统计算法

常常看到别人的博客里面,或者网站里面有这样随机颜色,但字体大小与标签出现频率有关的标签云,于是自己就想写一个.至于颜色的随机显示,那就很简单了,这里就不列代码. 因为正在学thinkphp,所以数据查找的都是用的tp数据查找语句. 1 Public function render( $data ){ 2 //在博文——标签多对多关系的中间表中查找出所有的标签 3 $tags = M('blog_tags')->select(); 4 $a = array(); 5 //去掉重复的标签,将所有不重

Hibernate中一对多和多对一关系

1.单向多对一和双向多对一的区别? 只需要从一方获取另一方的数据时 就使用单向关联双方都需要获取对方数据时 就使用双向关系 部门--人员 使用人员时如果只需要获取对应部门信息(user.getdeptarment())不需要 从部门下的人员信息时,就配置成单向 多对一 使用部门时如果只需要获取部门下人员信息(deptartmanet.getusers())不需要 从人员获取部门信息时,就配置成单向 一对多 既要获取部门下人员 deptartmanet.getusers()又要从人员获取部门信息