首页 > 其他 > 详细

DevExpress_XAF_初始化业务对象的默认属性值(一)——使用XPO框架

时间:2019-09-09 00:56:23      阅读:105      评论:0      收藏:0      [点我收藏+]

  在设计业务类时,一个常见的任务就是初始化对象。接下来的内容,我们将初始化不同类型的属性。

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

技术分享图片

  在官方文档中,找到的初始化默认对象属性值有两种方法(代码基本一致):一种是继承XPO框架的AfterConstruction()方法(我几乎是使用该方法);另一种是使用实体框架(Entity Framework),实现接口IXafEntityObject的OnCreated方法。

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

简单属性

  所有的基本持久类都派生自PersistentBase类。 可以使用PersistentBase.AfterConstruction方法作为业务对象的初始化方法。只在创建对象后调用一次。由于此方法是专门为初始化设计的,所以在为对象属性赋值时不需要检查当前对象状态。代码演示如下:

1 public class Contact : Person {
2 //... 
3     public override void AfterConstruction() {
4         base.AfterConstruction();
5 
6         FirstName = "Sam";
7         TitleOfCourtesy = TitleOfCourtesy.Mr;
8     }
9 }

 

引用属性

  引用属性也在AfterConstruction方法中初始化。与简单属性不同的是,需要获得现有对象。因此, 使用到FindObject方法。具体代码如下:

 1 public class Contact : Person {
 2     //... 
 3     public override void AfterConstruction() {
 4         base.AfterConstruction();
 5         Address1 = new Address(Session);
 6         Address1.Country = Session.FindObject<Country>(CriteriaOperator.Parse("Name = ‘USA‘"));
 7         if(Address1.Country == null) {
 8             Address1.Country = new Country(Session);
 9             Address1.Country.Name = "USA";                
10             Address1.Country.Save();
11         }
12         Manager = Session.FindObject<Contact>(CriteriaOperator.Parse(
13             "FirstName = ‘John‘ && LastName = ‘Doe‘"));
14     }
15 }

 

集合属性

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

 1 public class Contact : Person {
 2 //... 
 3     public override void AfterConstruction() {
 4         base.AfterConstruction();
 5 
 6         PhoneNumber phone1 = Session.FindObject<PhoneNumber>(CriteriaOperator.Parse(
 7             "Number = ‘555-0101‘"));
 8         PhoneNumber phone2 = Session.FindObject<PhoneNumber>(CriteriaOperator.Parse(
 9             "Number = ‘555-0102‘"));
10         PhoneNumbers.Add(phone1);
11         PhoneNumbers.Add(phone2);
12     }
13 }

 

计算属性

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

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

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

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

  可以在引用主对象的属性的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]相关博文——初始化业务对象初始化业务对象的默认属性值(二)——使用实体框架(Entity Framework):https://www.cnblogs.com/luyj00436/p/11489185.html

[2]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

[3]官网项目示例:http://www.devexpress.com/example=E2053

[4]默认属性值初始化对象: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

[5]简单初始化属性的教程:https://documentation.devexpress.com/eXpressAppFramework/112834/Getting-Started/Comprehensive-Tutorial-MainDemo-Application/Business-Model-Design/Business-Model-Design-with-XPO/Initialize-a-Property-After-Creating-an-Object-XPO

[6]通过新活动(Action)初始化创建对象:https://documentation.devexpress.com/eXpressAppFramework/112912/Task-Based-Help/Actions/How-to-Initialize-an-Object-Created-Using-the-New-Action

DevExpress_XAF_初始化业务对象的默认属性值(一)——使用XPO框架

原文:https://www.cnblogs.com/luyj00436/p/11489169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!