2014-01-17 41 views
0

我正在开发具有以下业务对象设计XAF Business Objects公司

员工 仓库 申请人

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

如何一DevExpress的XAF应用我可以使用单个EmailAddress业务对象完成此操作吗?

回答

2

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

但是,我不太清楚“使用单个EmailAddress业务对象”的含义,可能您并不需要如上所述的集合属性。

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

0

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

去通过上面的说法,有什么我可以做出来就是,你有Employee作为业务对象和这些实体可以有多个EmailIds。我建议你创建EmailId作为另一个业务对象,只有一个属性EmailId,并且在EmployeeEmailId业务对象之间有1对1的关系。不要忘记从导航项目中隐藏您的业务对象EmailIdEmailId应该只对创建新的Employee对象的用户可见,否则不应该被允许创建,而与任何关系无关。

我知道这是一个很晚的问题答案,但让我们知道你是如何解决你的问题。通过这样做,你可以帮助其他人面临类似的情况,你在。 谢谢。

0

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

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

}