DevExpress_XAF_初始化业务对象初始化业务对象的默认属性值(二)——使用实体框架(Entity Framework)

我们已知初始化业务对象的默认值有两种方法,使用XPO框架和实体框架。在上一篇中已说明了XPO,接下来说明使用实体框架。例子和代码与上一篇区别不大。

  将实现联系人(Contact)业务类,创建对象后,将使用默认值初始化对象。

  由上图我们可以知道,我们需要初始化的属性包括:

简单属性(名字(First Name)、尊称(Title Of Country))

  引用属性(地址1(Address1)、经理(Manager))

  集合属性(电话(Phone Numbers))

在接下来的文章中会一一举例。

  注:官方Demo详见参考网址。

简单属性

  可以在业务类中继承IXafEntityObject接口,然后使用该接口声明的IXafEntityObject.OnCreated来初始化业务对象。OnCreated()方法在对象创建后只调用一次,因此很适合用于初始化对象。下面是简单的代码示例——初始化联系人名字(FirstName)、尊称(TitleOfCourtesy)。

 1 public class Contact : Person, IXafEntityObject {
 2 //... 
 3 //初始化方法
 4     void IXafEntityObject.OnCreated() {
 5         FirstName = "Sam";                           //名字
 6         TitleOfCourtesy = TitleOfCourtesy.Mr;        //尊称
 7     }
 8     void IXafEntityObject.OnLoaded() { }
 9     void IXafEntityObject.OnSaving() { }
10 } 

 引用属性

引用属性也在OnCreated方法中初始化。与简单属性不同的是,需要获得现有对象。因此, 使用到FindObject方法。以下为简单代码示例——初始化地址(Address1)和经理(Manager)

 1 public class Contact : Person, IXafEntityObject, IObjectSpaceLink {
 2     //... 
 3     void IXafEntityObject.OnCreated() {
 4         // ... 
 5         Address1 = objectSpace.CreateObject<Address>();
 6         Address1.Country = objectSpace.FindObject<Country>(CriteriaOperator.Parse("Name = 'USA'"));
 7         if (Address1.Country == null) {
 8             Address1.Country = objectSpace.CreateObject<Country>();
 9             Address1.Country.Name = "USA";
10         }
11         Manager = objectSpace.FindObject<Contact>(
12             CriteriaOperator.Parse("FirstName = 'John' && LastName = 'Doe'"));
13     }
14     void IXafEntityObject.OnLoaded() { }
15     void IXafEntityObject.OnSaving() { }
16     private IObjectSpace objectSpace;
17     IObjectSpace IObjectSpaceLink.ObjectSpace {
18         get { return objectSpace; }
19         set { objectSpace = value; }
20     }
21 }

 集合属性

集合属性使用XPCollection.Add方法。以下代码演示如何使用预定义的电话号码填充集。

 1 public class Contact : Person, IXafEntityObject, IObjectSpaceLink {
 2     //... 
 3     void IXafEntityObject.OnCreated() {
 4         // ... 
 5         PhoneNumber phone1 = objectSpace.FindObject<PhoneNumber>(
 6             CriteriaOperator.Parse("Number = '555-0101'"));
 7         PhoneNumber phone2 = objectSpace.FindObject<PhoneNumber>(
 8             CriteriaOperator.Parse("Number = '555-0102'"));
 9         PhoneNumbers.Add(phone1);
10         PhoneNumbers.Add(phone2);
11     }
12     void IXafEntityObject.OnLoaded() { }
13     void IXafEntityObject.OnSaving() { }
14     private IObjectSpace objectSpace;
15     IObjectSpace IObjectSpaceLink.ObjectSpace {
16         get { return objectSpace; }
17         set { objectSpace = value; }
18     }
19 }

计算属性

  略。但关联属性发生改变时,计算属性会自动发生变化。

通过新活动(Action)初始化新创建对象

  略。详见https://documentation.devexpress.com/eXpressAppFramework/112912/Task-Based-Help/Actions/How-to-Initialize-an-Object-Created-Using-the-New-Act

用从主对象获取的值初始化子对象的属性

  可以在引用主对象的属性的setter中为子对象的属性设置默认值。  

 1 public class ChildObject : BaseObject {
 2     // ... 
 3     public MasterObject MasterObject {
 4         get { return masterObject; }
 5         set {
 6             bool modified = SetPropertyValue("MasterObject", ref masterObject, value) ;
 7             if (!IsLoading && !IsSaving && value != null && modified) {
 8                 this.SomeProperty = value.DefaultForChildren;
 9             }
10         }
11     }
12 }

 参考网址

  [1]相关博文——初始化业务对象初始化业务对象的默认属性值(一)——使用XPO框架:https://www.cnblogs.com/luyj00436/p/11489169.html

  [2]https://documentation.devexpress.com/eXpressAppFramework/113712/Task-Based-Help/Business-Model-Design/Entity-Framework-EF/How-to-Initialize-Business-Objects-with-Default-Property-Values-in-Entity-Framework

  [3] 用XPO中的默认属性值初始化业务对象: https://documentation.devexpress.com/eXpressAppFramework/113258/Task-Based-Help/Business-Model-Design/eXpress-Persistent-Objects-XPO/How-to-Initialize-Business-Objects-with-Default-Property-Values-in-XPO

  [4]官方演示代码地址:http://www.devexpress.com/example=T209960

  [5] 创建对象(EF)教程:https://documentation.devexpress.com/eXpressAppFramework/113636/Getting-Started/Comprehensive-Tutorial-MainDemo-Application/Business-Model-Design/Business-Model-Design-with-Entity-Framework/Initialize-a-Property-After-Creating-an-Object-EF

  [6] https://documentation.devexpress.com/eXpressAppFramework/112912/Task-Based-Help/Actions/How-to-Initialize-an-Object-Created-Using-the-New-Action

posted @ 2019-09-08 23:19  陆陆无为而治者  阅读(433)  评论(0编辑  收藏  举报