学习008-02-01-05 Configure a One-to-Many Relationship(配置一对多关系)

Configure a One-to-Many Relationship(配置一对多关系)

This lesson explains how to create a One-to-Many relationship between two entities and how XAF generates the UI for such a relationship.
本课介绍如何在两个实体之间创建一对多关系以及XAF如何为这种关系生成UI。

Note
Before you proceed, take a moment to review the previous lessons:(在继续之前,请花点时间回顾一下之前的课程:)

  • Implement a Data Model: Basics
  • Extend the Data Model
  • Supply Initial Data

Employee-Department Relationship(员工与部门的关系)

1.In the MySolution.Module\Business Objects folder, create the Department class. Replace the generated class declaration with the following code:
在MySolutions. Module\Business Objects文件夹中,创建部门类。将生成的类声明替换为以下代码:

C#

using DevExpress.Persistent.Base;
using DevExpress.Persistent.BaseImpl.EF;
using System.ComponentModel;namespace MySolution.Module.BusinessObjects
{[DefaultClassOptions][DefaultProperty(nameof(Title))]public class Department : BaseObject{public virtual string Title { get; set; }public virtual string Office { get; set; }}
}

The code applies the DefaultProperty attribute to the Department class. Use this attribute to specify the most descriptive property of your class. Default property values are displayed in the following UI elements:
该代码将DefaultProperty属性应用于部门类。使用此属性指定类的最具描述性的属性。默认属性值显示在以下UI元素中:

  • Detail form captions(详细表格标题)
  • The leftmost column of a List View(列表视图最左边的列)
  • Lookup List Views(查找列表视图)

Refer to the following topic for more information: Data Annotations in Data Model.
有关详细信息,请参阅以下主题:数据模型中的数据注释。

2.Go to the MySolution.Module\MySolutionDbContext file and add a DbSet of the Department class:
转到MySolutions. Module\MySolutionDbContext文件并添加部门类的DbSet:

C#

public class MySolutionEFCoreDbContext : DbContext {//...public DbSet<Department> Departments { get; set; }
}

3.Add the Department reference property to the Employee class:
将部门引用属性添加到员工类:

C#

//...
public class Employee : BaseObject {//...public virtual Department Department { get; set; }
}

When you add a reference property of one entity type to another entity type, you establish the “One” part of the relationship between these entities. In this case it is a relationship between the Department and Employee entity classes.
当您将一个实体类型的引用属性添加到另一个实体类型时,您将建立这些实体之间关系的“One”部分。在这种情况下,它是部门和员工实体类之间的关系。

Note that the property has the virtual access modifier for lazy loading implementation. For additional information, refer to the Microsoft documentation: Lazy Loading.
请注意,该属性具有用于延迟加载实现的虚拟访问修饰符。有关其他信息,请参阅Microsoft留档:延迟加载。

4.Add the Employees collection property to the Department class and initialize it in the constructor:
将雇员集合属性添加到部门类并在构造函数中初始化它:

C#

// ...
using System.Collections.ObjectModel;
//...
public class Department : BaseObject {//..public virtual IList<Employee> Employees { get; set; } = new ObservableCollection<Employee>();
}

This way, you implement the “Many” part of the relationship between the Department object and the Employee object.
这样,您就实现了部门对象和员工对象之间关系的“Many”部分。

5.Add a migration and update the database. See the following section for details: Use a DBMS: Setup Migrations.
添加迁移并更新数据库。有关详细信息,请参阅以下部分:使用DBMS:设置迁移。

6.Run the application.
运行应用程序。

Open the Department Detail View. You can see the Employees group. This is how XAF renders the Employees collection property.
打开部门详细信息视图。您可以看到员工组。这就是XAF呈现员工集合属性的方式。

To add objects to the Employees collection, use the New or Link button in this tab. The Link button allows users to add references to existing Employee objects.
要将对象添加到员工集合,请使用此选项卡中的新建或链接按钮。链接按钮允许用户添加对现有员工对象的引用。

ASP.NET Core Blazor
在这里插入图片描述

Windows Forms
在这里插入图片描述

To remove a reference to an object from this collection, select this object and click Unlink.
要从此集合中删除对对象的引用,请选择此对象并单击取消链接。

Tip
If you create a new Department and then create a new Employee in the Employees collection, the associated Department is not immediately visible in the Detail View of the newly created Employee object. The link between these objects is added later when you save the Employee object. To change this behavior, use the XafApplication.LinkNewObjectToParentImmediately property. When the property value is true, the application creates a link and saves it immediately after you click New.
如果创建新部门,然后在员工集合中创建新员工,则关联的部门不会立即在新创建的员工对象的详细信息视图中可见。这些对象之间的链接稍后会在保存员工对象时添加。要更改此行为,请使用XafApplication.LinkNewObjectToParentImmediately属性。当属性值为true时,应用程序会创建一个链接,并在单击新建后立即保存。

7.Open the Employee Detail View. In this view, XAF creates a lookup editor for the Department reference property. Lookup editors support incremental filtering. This editor uses a special type of View — Lookup List View. The Lookup List View includes a single column that displays the values of the default property. In your application, these are the values of the Title property.
打开员工详细信息视图。在此视图中,XAF为部门引用属性创建一个查找编辑器。查找编辑器支持增量过滤。此编辑器使用一种特殊类型的视图-查找列表视图。查找列表视图包括一个显示默认属性值的列。在您的应用程序中,这些是标题属性的值。

ASP.NET Core Blazor
在这里插入图片描述

Windows Forms
在这里插入图片描述

Note(注)
The most common pattern for a relationship is to define properties on both ends of the relationship. At the same time, according to the conventions of Entity Framework Core, it is sufficient to add only the reference property (the “One” part). It establishes the “One-To-Many” relationship between entities and Entity Framework Core automatically creates a foreign key to the related table in the database.
关系最常见的模式是在关系的两端定义属性。同时,根据实体框架核心的约定,只添加引用属性(“One”部分)就足够了。它建立了实体之间的“One-To-Many”关系,实体框架核心自动创建数据库中相关表的外键。
The main difference between these techniques is how XAF renders the application’s UI. When you omit the “Many” part of the relationship, XAF doesn’t create an editor for the omitted collection property in the Detail View of the entity class. You can see an example of this in the following lesson: Implement Reference Properties.
这些技术之间的主要区别在于XAF如何呈现应用程序的用户界面。当您省略关系的“Many”部分时,XAF不会在实体类的详细信息视图中为省略的集合属性创建编辑器。您可以在以下课程中看到一个示例:实现引用属性。

Exercise: Create an Employee-PhoneNumber Relationship(练习:建立Employee-PhoneNumber关系)

1.Create a PhoneNumber class and implement a One-To-Many relationship between this class and the Employee class. This time the Employee should be the “One” part of the relationship, while the PhoneNumber should be the “Many” part. You can find the type declaration in the code sample below.
创建一个PhoneNumber类,并在这个类和员工类之间实现一对多关系。这次员工应该是关系的“One”部分,而电话号码应该是“Many”部分。您可以在下面的代码示例中找到类型声明。

Tip
Remember to register the new entity in DbContext and create a new migration for the database.
请记住在DbContext中注册新实体并为数据库创建新的迁移。

Use the code sample below to replace the autogenerated class declaration in the PhoneNumber class:
使用下面的代码示例替换PhoneNumber类中的自动生成类声明:

C#

using DevExpress.Persistent.BaseImpl.EF;
using System.ComponentModel;namespace MySolution.Module.BusinessObjects;[DefaultProperty(nameof(Number))]
public class PhoneNumber : BaseObject
{public virtual String Number { get; set; }public virtual String PhoneType { get; set; }public override String ToString(){return Number;}
}

This class is not visible in the navigation control.
此类在导航控件中不可见。

2.Run the application. Open the Employee Detail View to see the Phone Numbers group:
运行应用程序。打开员工详细信息视图以查看电话号码组:

ASP.NET Core Blazor
在这里插入图片描述

Windows Forms
在这里插入图片描述

Next Lesson(下一课)

Configure a Many-to-Many Relationship
配置多对多关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx高可用实例

什么是nginx高可用 为什么需要高可用 正常情况下使用nginx&#xff0c;浏览器访问网址到nginx服务器&#xff0c;nginx再发送到目标服务器&#xff0c;获取资源返回。 但是会有一个问题&#xff1a;当nginx进程发生宕机&#xff0c;此时目标服务器存在&#xff0c;但是浏览器访…

Vue入门之v-for、computed、生命周期和模板引用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Linux系统下U-Boot基本操作——UBoot基础知识

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

React基础学习-Day08

React基础学习-Day08 React生命周期&#xff08;旧&#xff09;&#xff08;新&#xff09;&#xff08;函数组件&#xff09; &#xff08;旧&#xff09; 在 React 16 版本之前&#xff0c;React 使用了一套不同的生命周期方法。这些生命周期方法在 React 16 中仍然可以使用…

django报错(二):NotSupportedError:MySQL 8 or later is required (found 5.7.43)

执行python manage.py runserver命令时报版本不支持错误&#xff0c;显示“MySQL 8 or later is required (found 5.7.43)”。如图&#xff1a; 即要MySQL 8或更高版本。但是企业大所数用的还是mysql5.7相关版本。因为5.7之后的8.x版本是付费版本&#xff0c;贸然更新数据库肯定…

RK3562 NPU开发环境搭建

如何在Ubuntu系统&#xff08;PC&#xff09;上搭建RK3562 Buildroot Linux的NPU开发环境&#xff1f;即电脑端运行Ubuntu系统&#xff0c;而RK3562板卡运行Buildroot Linux系统的情况下&#xff0c;搭建RK3562 NPU开发环境。 下面是相应的步骤&#xff08;对应的命令&#xf…

DICOM CT\MR片子免费在线查看工具;python pydicom包加载查看;mayavi 3d查看

DICOM CT\MR片子免费在线查看工具 参考&#xff1a; https://zhuanlan.zhihu.com/p/668804209 dicom格式&#xff1a; DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;是医学数字成像和通信的标准。它定义了医学图像&#xff08;如CT、MRI、X…

蓝桥 双周赛算法赛【小白场】

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 蓝桥第14场小白入门赛T1/T2/T3 题目&#xff1a; T1照常还是送分题无需多…

ChatTTS超强的真人AI语音助手下载使用教程

简介 ChatTTS是专门为对话场景设计的文本转语音模型&#xff0c;支持多人同时对话&#xff0c;适用的场景非常丰富&#xff0c;比如LLM助手对话任务&#xff0c;视频配音、声音克隆等。同时支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练&#xf…

AI 基于病理图像分析揭示了一种不同类型的子宫内膜癌| 文献速递-基于人工智能(AI base)的医学影像研究与疾病诊断

Title 题目 AI-based histopathology image analysisreveals a distinct subset of endometrialcancers AI 基于病理图像分析揭示了一种不同类型的子宫内膜癌。 01 文献速递介绍 子宫内膜癌&#xff08;EC&#xff09;有四种分子亚型&#xff0c;具有很强的预后价值和治疗…

如何安装Visual Studio Code

Visual Studio Code&#xff08;简称 VS Code&#xff09; Visual Studio Code 是一款由微软开发的免费、开源的现代化轻量级代码编辑器。 主要特点包括&#xff1a; 跨平台&#xff1a;支持 Windows、Mac 和 Linux 等主流操作系统&#xff0c;方便开发者在不同平台上保持一…

二叉树 初阶 总结

树的基础认知 结点的度&#xff1a;一个结点含有的子树的个数称为该结点的度&#xff1b; 如上图&#xff1a;A的为6 叶结点或终端结点&#xff1a;度为0的结点称为叶结点&#xff1b; 如上图&#xff1a;B、C、H、I...等结点为叶结点 非终端结点或分支结点&#xff1a;度不为0…

采用T网络反馈电路的运算放大器(运放)反相放大器

运算放大器(运放)反相放大器电路 设计目标 输入电压ViMin输入电压ViMax输出电压VoMin输出电压VoMaxBW fp电源电压Vcc电源电压Vee-2.5mV2.5mV–2.5V2.5V5kHz5V–5V 设计说明1 该设计将输入信号 Vin 反相并应用 1000V/V 或 60dB 的信号增益。具有 T 反馈网络的反相放大器可用…

【鸿蒙学习笔记】位置设置・position・绝对定位・子组件相对父组件

官方文档&#xff1a;位置设置 目录标题 position・绝对定位・子组件相对父组件Row Text position position・绝对定位・子组件相对父组件 正→ ↓ Row Text position Entry Component struct Loc_position {State message: string Hello World;build() {Column() {Co…

【Neural signal processing and analysis zero to hero】- 1

The basics of neural signal processing course from youtube: 传送地址 Possible preprocessing steps Signal artifacts (not) to worry about doing visual based artifact rejection so that means that before you start analyzing, you can identify those data epic…

Elasticsearch:如何选择向量数据库?

作者&#xff1a;来自 Elastic Elastic Platform Team 向量数据库领域是一个快速发展的领域&#xff0c;它正在改变我们管理和搜索数据的方式。与传统数据库不同&#xff0c;向量数据库以向量的形式存储和管理数据。这种独特的方法可以实现更精确、更相关的搜索&#xff0c;并允…

【HarmonyOS】关于鸿蒙消息推送的心得体会 (一)

【HarmonyOS】关于鸿蒙消息推送的心得体会&#xff08;一&#xff09; 前言 这几天调研了鸿蒙消息推送的实现方式&#xff0c;形成了开发设计方案&#xff0c;颇有体会&#xff0c;与各位分享。 虽然没做之前觉得很简单的小功能&#xff0c;貌似只需要和华为服务器通信&…

Unity XR Interaction Toolkit的安装(二)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、安装1.打开unity项目2.打开包管理器&#xff08;PackageManage&#xff09;3.导入Input System依赖包4.Interaction Layers unity设置总结 前言 安装前请注意&#xff1a;需要…

科技论文在线--适合练习期刊写作和快速发表科技成果论文投稿网站

中国科技论文在线这个平台可以作为练手的一个渠道&#xff0c;至少可以锻炼一下中文写作&#xff0c;或者写一些科研方向的简单综述性文章。当然&#xff0c;如果你的老师期末要求也是交一份科技论文在线的刊载证明的话&#xff0c;这篇文章可以给你提供一些经验。 中国科技论…

【Linux服务器Java环境搭建】011在linux中安装Nginx,以及停止或启动Nginx服务

系列文章目录 【Linux服务器Java环境搭建】 前言 又到了周五晚上了&#xff0c;最近工作上有些忙&#xff0c;忙于一个需求频繁变更的项目&#xff0c;都快吐血了&#xff0c;懂得都懂&#xff0c;哈哈&#xff0c;正好有时间了&#xff0c;继续写系列【Linux服务器Java环境搭…