Set a Many-to-Many Relationship设置多对多关系 (EF)
Posted foreachlife
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Set a Many-to-Many Relationship设置多对多关系 (EF)相关的知识,希望对你有一定的参考价值。
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 业务类,并在"联系人"和"任务"对象之间设置多对多关系。您还将学习引用对象的自动用户界面构造基础知识。
Note
Before proceeding, take a moment to review the Inherit from the Business Class Library Class (EF) lesson.
-
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.
注意
在继续之前,请花点时间复习从商务舱库类 (EF) 课程继承。
- 要将 Task 业务类添加到应用程序,可以使用 Business 类库中的"任务"类。由于您需要设置"联系人"和"任务"对象之间的关系,因此需要自定义 Task 类实现。从此类继承并添加"联系人"集合属性,如以下代码所示。
using System.Collections.Generic; using DevExpress.ExpressApp.Model; using DevExpress.Persistent.Base; using DevExpress.Persistent.BaseImpl.EF; namespace MySolution.Module.BusinessObjects { [DefaultClassOptions] [ModelDefault("Caption", "Task")] public class DemoTask : Task { public DemoTask() : base() { TrackedBy = new List<Contact>(); } public virtual IList<Contact> TrackedBy { get; set; } } }
Note that the TrackedBy collection of Contact objects is declared as a virtual property and is initialized in the constructor.
请注意,Contact 对象的 TrackedBy 集合声明为虚拟属性,并在构造函数中初始化。
-
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> node 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>*自己的会员 |通过将 ModelDefault 属性应用于业务类或其成员,<Member>节点。 -
Register the DemoTask type in the DbContext. Edit the BusinessObjectsMySolutionDbContext.cs file as shown below.
-
在 DbContext 中注册演示任务类型。编辑业务对象_MySolutionDbContext.cs 文件,如下所示。
public class MySolutionDbContext : DbContext { //... public DbSet<DemoTask> TrackedTasks { get; set; } }
-
Modify the Contact class implementation: add the Tasks property as the second part of the relationship. The following code demonstrates the required changes in the Contact class implementation. Note that the Tasks collection of Contact objects is declared as a virtual property and is initialized in the constructor.
- 修改联系人类实现:将 Tasks 属性添加为关系的第二部分。以下代码演示了联系人类实现中所需的更改。请注意,Contact 对象的"任务"集合声明为虚拟属性,并在构造函数中初始化。
using System.Collections.Generic; //... public class Contact : Person { public Contact() { Tasks = new List<DemoTask>(); } //... public virtual IList<DemoTask> Tasks { get; set; } }
The code above will automatically generate the required intermediate tables and relationships.
-
Run the WinForms or ASP.NET application. Invoke the Contact Detail View or Task Detail View. Add tasks to a Contact object‘s Tracked Tasks collection, or contacts to a Task object‘s Tracked By collection. To apply the assignment, use the Link button that accompanies these collections.
上述代码将自动生成所需的中间表和关系。
- 运行 WinForms 或ASP.NET应用程序。调用联系人详细信息视图或任务详细信息视图。将任务添加到联系人对象的"跟踪任务"集合,或将联系人添加到"任务"对象的"按"集合中。要应用分配,请使用这些集合附带的链接按钮。
You can see the code demonstrated in this lesson in the MySolution.Module | Data | Contact.cs (Contact.vb) and DemoTask.cs (DemoTask.vb) files of the EF Demo (Code First) installed with XAF. By default, the EF Demo (Code First) application is installed in %PUBLIC%DocumentsDevExpress Demos 19.2ComponentseXpressApp FrameworkEFDemoCodeFirst.
您可以在 MySolution.模块中看到本课中演示的代码。数据 |与 XAF 一起安装的 EF 演示(代码优先)的Contact.cs (Contact.vb) 和DemoTask.cs (DemoTask.vb) 文件。默认情况下,EF 演示(代码优先)应用程序安装在 %PUBLIC%_文档_DevExpress 演示 19.2_组件_eXpressApp 框架_EFDemoCodeFirst 中。
以上是关于Set a Many-to-Many Relationship设置多对多关系 (EF)的主要内容,如果未能解决你的问题,请参考以下文章
bug之needs to have a value for field "id" before this many-to-many relationship can be used
Django, one-to-many, many-to-many