【问题标题】:Designing XAF Business Objects设计 XAF 业务对象
【发布时间】:2017-11-04 14:05:08
【问题描述】:

我正在开发具有以下业务对象的 DevExpress XAF 应用程序

员工 仓库 ​申请人

每个实体都可以有一个或多个电子邮件地址

如何使用单个 EmailAddress 业务对象完成此操作?

【问题讨论】:

    标签: devexpress xaf


    【解决方案1】:

    您可以引入包含一组 EmailAddress 对象 (http://documentation.devexpress.com/#Xaf/CustomDocument2733) 的基本持久类,然后从它继承您的其他类。 作为继承的替代方法,您可以使用聚合。

    但是,我不太确定您所说的“使用单个 EmailAddress 业务对象​”究竟是什么意思,可能您不需要我上面建议的集合属性。

    附: 要在 DevExpress 产品方面获得有保证的快速帮助,请使用官方支持中心 (http://www.devexpress.com/Support/),在评估期间免费访问。

    【讨论】:

      【解决方案2】:

      “这些实体中的每一个都可以有一个或多个电子邮件地址”

      按照上面的陈述,我可以看出,您将Employee 作为业务对象,这些实体可以有多个EmailIds。我建议您创建 EmailId 作为另一个业务对象,其中只有一个属性 EmailId 并且在您的 EmployeeEmailId 业务对象之间具有一对*关系。不要忘记从导航项中隐藏您的业务对象EmailIdEmailId 应该只对创建新的Employee 对象的用户可见,否则不应允许创建,与任何关系无关。

      我知道这是一个很晚才回答的问题,但请告诉我们您是如何解决问题的。通过这样做,您可以帮助面临与您类似情况的其他人。 谢谢。

      【讨论】:

        【解决方案3】:

        创建一个没有链接回任何其他类的电子邮件类。然后创建需要收集电子邮件的类。现在你有两个选择。您可以向电子邮件类添加多个反向链接,并为每个父类添加正确的关联,或者您可以为每个父类创建单独的子(电子邮件)类。子类将继承自电子邮件,并且只将反向链接添加到父类。

        【讨论】:

          【解决方案4】:

          你可以使用这种类型; (如果你想自动生成密钥,我使用 XPLiteObject,你可以使用 XPObject)

          public class Person : XPLiteObject
          {
              public Person(Session session)
                  : base(session)
              {
              }
              public override void AfterConstruction()
              {
                  base.AfterConstruction();
          
              }
              [Association("PersonEmails", UseAssociationNameAsIntermediateTableName = true)]
              public XPCollection<Email> Emails
              {
                  get
                  {
                      return GetCollection<Email>("Emails");
                  }
              }
          
          
          
          }
          
          public class Email : XPLiteObject
          {
              public Email(Session session)
                  : base(session)
              {
              }
              public override void AfterConstruction()
              {
                  base.AfterConstruction();
          
              }
          
              private Person person;
              [Association]
              public Person Person
              {
                  get { return person; }
                  set { SetPropertyValue("Person", ref person, value); }
              }
          
          }
          

          【讨论】:

            猜你喜欢
            • 2011-02-18
            • 2010-09-15
            • 1970-01-01
            • 2023-03-23
            • 1970-01-01
            • 2021-11-22
            • 1970-01-01
            • 1970-01-01
            • 2011-02-23
            相关资源
            最近更新 更多