EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:在实体框架中使用默认属性值初始化业务对象

在设计业务类时,一项常见的任务是确保使用默认属性值初始化一个新创建的业务对象。本主题说明如何初始化不同类型的属性。例如,将实现“联系人”业务类。创建Contact对象后,其属性将使用默认值初始化。

InitializeObjects_Win

提示

DevExpress代码示例数据库(http://www.devexpress.com/example=T209960)中提供了完整的示例项目。

提示

XPO的类似示例可在“如何:在XPO中使用默认属性值初始化业务对象”主题中找到。

简单属性

您可以在业务类中支持IXafEntityObject接口。该接口声明用于对象初始化的IXafEntityObject.OnCreated方法。该OnCreated方法只调用一次一个对象-在创建对象之后。每当需要初始化对象时,都将初始化代码放入OnCreated方法主体中。以下代码段演示了如何初始化简单的值属性。

public class Contact : Person, IXafEntityObject {
    //...
    void IXafEntityObject.OnCreated() {
        FirstName = "Sam";
        TitleOfCourtesy = TitleOfCourtesy.Mr;
    }
    void IXafEntityObject.OnLoaded() { }
    void IXafEntityObject.OnSaving() { }
}

要查看初始化简单属性的另一个示例,请参考创建对象后初始化属性(EF)教程课程。

参考属性

引用属性的初始化与简单属性的初始化不同,主要在于您可能需要获取对现有对象的引用。为此,请使用对象的Object Space的IObjectSpace.FindObject方法。要从业务对象代码访问对象空间,您应该支持IObjectSpaceLink接口。以下代码段演示了如何使用新对象和现有对象初始化引用属性。

public class Contact : Person, IXafEntityObject, IObjectSpaceLink {
    //...
    void IXafEntityObject.OnCreated() {
        // ...
        Address1 = objectSpace.CreateObject<Address>();
        Address1.Country = objectSpace.FindObject<Country>(CriteriaOperator.Parse("Name = 'USA'"));
        if (Address1.Country == null) {
            Address1.Country = objectSpace.CreateObject<Country>();
            Address1.Country.Name = "USA";
        }
        Manager = objectSpace.FindObject<Contact>(
            CriteriaOperator.Parse("FirstName = 'John' && LastName = 'Doe'"));
    }
    void IXafEntityObject.OnLoaded() { }
    void IXafEntityObject.OnSaving() { }
    private IObjectSpace objectSpace;
    IObjectSpace IObjectSpaceLink.ObjectSpace {
        get { return objectSpace; }
        set { objectSpace = value; }
    }
}

收藏物业

以下代码段演示了如何使用预定义的电话号码填充Phones集合。

public class Contact : Person, IXafEntityObject, IObjectSpaceLink {
    //...
    void IXafEntityObject.OnCreated() {
        // ...
        PhoneNumber phone1 = objectSpace.FindObject<PhoneNumber>(
            CriteriaOperator.Parse("Number = '555-0101'"));
        PhoneNumber phone2 = objectSpace.FindObject<PhoneNumber>(
            CriteriaOperator.Parse("Number = '555-0102'"));
        PhoneNumbers.Add(phone1);
        PhoneNumbers.Add(phone2);
    }
    void IXafEntityObject.OnLoaded() { }
    void IXafEntityObject.OnSaving() { }
    private IObjectSpace objectSpace;
    IObjectSpace IObjectSpaceLink.ObjectSpace {
        get { return objectSpace; }
        set { objectSpace = value; }
    }
}

计算属性

更改关联的属性值时,会自动更新计算出的属性值。要了解如何实现常规的计算属性,请参阅“使属性可计算”教程课程。了解如何基于子对象集合中包含的对象的属性值实现计算所得的属性。请参阅“如何:基于详细信息集合的帮助主题中的值来计算属性值”。

初始化通过New Action创建的对象

在某些情况下,您可能只需要初始化专门通过New Action创建的对象。若要了解如何执行此操作,请参阅“如何:初始化使用“新建操作”创建的对象”帮助主题。

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

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

public class ChildObject {
    // ...
    public MasterObject MasterObject {
        get { return masterObject; }
        set {
            if (master == value) return;
            masterObject = value;
            if (value != null) {
                this.SomeProperty = value.DefaultForChildren;
            }
        }
    }
}

由于在提交更改之前不会初始化子对象的引用属性,因此有必要根据主对象使用ViewController来初始化子对象(请参阅如何:初始化使用New Action创建的对象)。

相关文章

转载保留此链接,注明出处