EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

实施依赖的参考属性(EF)

在本课程中,您将学习如何实现其值可能取决于其他属性的属性。该经理属性将被添加到联系人类。默认情况下,它将由一个查找编辑器表示,该编辑器包含数据库中存在的所有Contact。但是,您可能需要此编辑器包含来自同一Department的Contact。另外,您可能需要这些联系人的职位为“经理”。为此,请为Manager属性使用DataSourcePropertyAttribute和DataSourceCriteriaAttribute属性。

  • 将Contact类型的新Manager属性添加到Contact类。将DataSourceProperty属性应用于此属性,如下所示。

    using DevExpress.Persistent.Base;
    //...
    public class Contact : Person {
        public Contact() {
            //...
            Subordinates = new List<Contact>();
        }
        //...
        [DataSourceProperty("Department.Contacts")]
        public virtual Contact Manager { get; set; }
        public virtual IList<Contact> Subordinates { get; set; }
    }
    
    注意

    在EF中,您始终需要实现关系的两个“方面”。这意味着每个联系人必须具有一个经理和一个下属列表。

    随着DataSourceProperty应用属性时,经理查询编辑器将包含联系由指定的对象对象的联系人属性。

  • 运行该应用程序,然后在“新建”组合框的下拉列表中选择“联系人”。该联系人详细信息视图将被调用。指定Department属性并展开Manager查找编辑器。确保列出的对象的Department属性与上面指定的属性相同。

    Tutorial_BMD_Lesson7_1

  • DataSourceCriteria属性应用于Contact类的Manager属性,如下所示。

    public class Contact : Person {
        //...
        [DataSourceProperty("Department.Contacts")]
        [DataSourceCriteria("Position.Title = 'Manager'")]
        public virtual Contact Manager { get; set; }
    }
    

    DataSourceCriteria施加属性,所述管理器查询编辑器将包含联系满足在属性参数中指定的条件的对象。

  • 运行应用程序。将多个Contact对象的Position属性设置为“ Manager” 。

    经理_XAF

  • 在“新建”()按钮的下拉列表中选择“联系人”。该联系人详细信息视图将被调用。指定Department属性并展开Manager查找编辑器。检查以确保每个列出的对象的Position属性都设置为“ Manager”。new_dropdown_btn

    Tutorial_BMD_Lesson7_2

  • 如果未为Contact指定Department属性,则可以为Manager查找编辑器提供另一个数据源。为此,请为DataSourceProperty属性指定第二个参数。在下面的代码中,此参数设置为DataSourcePropertyIsNullMode.SelectAll值。您还可以设置DataSourcePropertyIsNullMode.SelectNothing或DataSourcePropertyIsNullMode.CustomCriteria值。在后一种情况下,需要第三个参数来指定标准。

    public class Contact : Person {
        //...
        [DataSourceProperty("Department.Contacts", DataSourcePropertyIsNullMode.SelectAll)]
        [DataSourceCriteria("Position.Title = 'Manager'")]
        public virtual Contact Manager { get; set; }
    }
    

    如果未指定Department属性,则 上面的代码将显示Manager查找编辑器中的所有联系人。

  • 运行该应用程序并检查结果。

您可以在MySolution.Module中查看本课程中演示的代码。数据| XAF附带的EF演示(代码优先)的Contact.csContact.vb)文件。默认情况下,EF Demo(代码优先)应用程序安装在%PUBLIC%\ Documents \ DevExpress Demos 19.2 \ Components \ eXpressApp Framework \ EFDemoCodeFirst中。

下一课: 在代码(EF)中实现属性值验证

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