Devexpress 设计XAF业务对象

Devexpress 设计XAF业务对象,devexpress,xaf,Devexpress,Xaf,我正在开发一个具有以下业务对象的DevExpress XAF应用程序 雇员 仓库 ​申请人 每个实体都可以有一个或多个电子邮件地址 如何使用单个EmailAddress业务对象实现这一点​? 您可以引入一个带有EmailAddress对象集合()的基本持久类,然后从中继承其他类。 作为继承的替代方法,您可以使用聚合 但是,我不太清楚“使用单个EmailAddress业务对象”的确切含义​", 可能您不需要我上面建议的集合属性 附言。 要获得DevExpress产品的保证和快速帮助,请使用官方支持

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

雇员 仓库 ​申请人

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


如何使用单个EmailAddress业务对象实现这一点​?

您可以引入一个带有EmailAddress对象集合()的基本持久类,然后从中继承其他类。 作为继承的替代方法,您可以使用聚合

但是,我不太清楚“使用单个EmailAddress业务对象”的确切含义​", 可能您不需要我上面建议的集合属性

附言。 要获得DevExpress产品的保证和快速帮助,请使用官方支持中心(),在评估期间免费访问该中心

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

根据上面的陈述,我能理解的是,您将
Employee
作为一个业务对象,这些实体可以有多个
EmailId
。我建议您创建
EmailId
作为另一个业务对象,只有一个属性
EmailId
,并且在
员工
EmailId
业务对象。不要忘记从导航项目中隐藏您的业务对象
EmailId
EmailId
应仅对创建新的
Employee
对象的用户可见,否则不允许创建它,与任何关系无关

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

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

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

公共类人物:XPLiteObject
{
公众人士(会议)
:基本(会话)
{
}
公共工程
{
基础。后构造();
}
[关联(“PersonEmails”,UseAssociationNameAsIntermediateTableName=true)]
公开收集电子邮件
{
得到
{
返回GetCollection(“电子邮件”);
}
}
}
公共类电子邮件:XPLiteObject
{
公共电子邮件(会话)
:基本(会话)
{
}
公共工程
{
基础。后构造();
}
私人;
[协会]
公众人物
{
获取{返回人;}
set{SetPropertyValue(“Person”,ref Person,value);}
}
}
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); }
    }

}