EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:在XAF中使用XPO上播

在本主题中,您将学习如何在XAF中使用XPO的Upcasting功能。当您需要在单个查询中组合基类和派生类时,此功能很有用。

提示

移动应用程序不支持向上转换。

以下业务模型将被实施以演示UpCasting

装箱1

下面的代码描述了持久类的层次结构:

[DefaultClassOptions]
[System.ComponentModel.DefaultProperty(nameof(Title))]
   public class Department : BaseObject {
   private string title;
   private string office;
   public Department(Session session) : base(session) {}
   public string Title {
      get {return title;}
      set {
         SetPropertyValue(nameof(Title), ref title, value);
      }
   }
   public string Office {
      get {return office;}
      set {
         SetPropertyValue(nameof(Office), ref office, value);
      }
   }
   [Association("Department-Employees")]
   public XPCollection<EmployeeBase> Employees {
      get {return GetCollection<EmployeeBase>(nameof(Employees));}
   }
}

public class EmployeeBase : BaseObject {
   public EmployeeBase(Session session) : base(session) {}
   private string name;
   private string email;
   public string Name {
      get {return name;}
      set {
         SetPropertyValue(nameof(Name), ref name, value);
      }
   }
   public string Email {
      get {return email;}
      set {
         SetPropertyValue(nameof(Email), ref email, value);
      }
   }
   private Department department;
   [Association("Department-Employees")]
   public Department Department {
      get {return department;}
      set {
         SetPropertyValue(nameof(Department), ref department, value);
      }
   }
}

[DefaultClassOptions]
public class LocalEmployee : EmployeeBase {
   public LocalEmployee(Session session): base(session) {}
   private string insurancePolicyNumber;
   public string InsurancePolicyNumber {
      get {return insurancePolicyNumber;}
      set {
         SetPropertyValue(nameof(InsurancePolicyNumber), ref insurancePolicyNumber, value);
      }
   }
}

[DefaultClassOptions]
public class ForeignEmployee : EmployeeBase {
   public ForeignEmployee(Session session): base(session) {}    
   private DateTime visaExpirationDate;
   public DateTime VisaExpirationDate {
      get {return visaExpirationDate;}
      set {
         SetPropertyValue(nameof(VisaExpirationDate), ref visaExpirationDate, value);
      }
   }
}

在上面的代码中,Department,LocalEmployee和ForeignEmployee类使用DefaultClassOptions属性。要了解更多信息,请参阅“数据模型中的数据注释”主题。

现在,运行该应用程序(无论是Windows Forms还是ASP.NET Web应用程序)。调用部门详细信息视图:

上演3

嵌套的员工列表视图仅显示EmployeeBase类的属性。此行为是设计使然。但是,最好在“雇员列表”视图中显示“雇员”类后代的特定属性。借助UpCasting功能,可以轻松完成此任务。

要将必需的列添加到表示Department.Employees集合的列表视图中,请调用模型编辑器。找到视图| Department_Employees_ListView | 列节点。通过上下文菜单添加两个附加的子节点。通过以下值指定其PropertyName属性:

  • <LocalEmployee> InsurancePolicyNumber
  • <外国雇员> VisaExpirationDate

这些值将由XPO识别,并且将从数据库检索到Department.Employees集合的对象显示LocalEmployee.InsurancePolicyNumber和ForeignEmployee.VisaExpirationDate属性。

此外,将“保险单号”和“签证到期日期”值设置为新添加的列的“标题”属性。

运行该应用程序,然后再次调用“部门详细信息视图”:

上演2

您可以看到EmployeeBase类后代的属性与EmployeeBase类属性一起显示。

相关文章

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