0

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

员工仓库申请者

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

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

4

4 回答 4

3

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

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

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

于 2014-01-23T11:43:58.133 回答
0

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

按照上面的陈述,我可以得出的是,你得到了Employee一个业务对象,这些实体可以有多个EmailIds. 我建议您将其创建EmailId为仅具有一个属性的另一个业务对象,并且在您的业务对象和业务对象EmailId之间具有 1 -to- * 关系。不要忘记从导航项中隐藏您的业务对象。应该只对创建新对象的用户可见,否则不应该被允许创建,独立于任何关系。EmployeeEmailIdEmailIdEmailIdEmployee

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

于 2014-02-28T12:21:44.407 回答
0

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

于 2016-04-23T02:26:47.790 回答
0

你可以使用这种类型;(如果你想自动生成密钥,我使用 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); }
    }

}
于 2017-11-04T05:45:55.143 回答