DevExpress_XAF_初始化业务对象的默认属性值(一)——使用XPO框架
在设计业务类时,一个常见的任务就是初始化对象。接下来的内容,我们将初始化不同类型的属性。
例如,将实现联系人(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
[3]官网项目示例:http://www.devexpress.com/example=E2053
[6]通过新活动(Action)初始化创建对象:https://documentation.devexpress.com/eXpressAppFramework/112912/Task-Based-Help/Actions/How-to-Initialize-an-Object-Created-Using-the-New-Action