设计XAF Business Objects

时间:2014-01-17 12:28:11

标签: devexpress xaf

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

员工 仓库 申请人

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

  

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

按照上面的说法,我可以得到的是,您将Employee作为业务对象,这些实体可以有多个EmailIds。我建议您将EmailId创建为另一个只包含一个属性EmailId的业务对象,并在EmployeeEmailId业务对象之间建立1对*关系。不要忘记从导航项中隐藏业务对象EmailId。只有创建新EmailId个对象的用户才能看到Employee,否则不应该允许创建它,而与任何关系无关。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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); }
    }

}