【发布时间】:2017-11-04 14:05:08
【问题描述】:
我正在开发具有以下业务对象的 DevExpress XAF 应用程序
员工 仓库 申请人
每个实体都可以有一个或多个电子邮件地址
如何使用单个 EmailAddress 业务对象完成此操作?
【问题讨论】:
标签: devexpress xaf
我正在开发具有以下业务对象的 DevExpress XAF 应用程序
员工 仓库 申请人
每个实体都可以有一个或多个电子邮件地址
如何使用单个 EmailAddress 业务对象完成此操作?
【问题讨论】:
标签: devexpress xaf
您可以引入包含一组 EmailAddress 对象 (http://documentation.devexpress.com/#Xaf/CustomDocument2733) 的基本持久类,然后从它继承您的其他类。 作为继承的替代方法,您可以使用聚合。
但是,我不太确定您所说的“使用单个 EmailAddress 业务对象”究竟是什么意思,可能您不需要我上面建议的集合属性。
附: 要在 DevExpress 产品方面获得有保证的快速帮助,请使用官方支持中心 (http://www.devexpress.com/Support/),在评估期间免费访问。
【讨论】:
“这些实体中的每一个都可以有一个或多个电子邮件地址”
按照上面的陈述,我可以看出,您将Employee 作为业务对象,这些实体可以有多个EmailIds。我建议您创建 EmailId 作为另一个业务对象,其中只有一个属性 EmailId 并且在您的 Employee 和 EmailId 业务对象之间具有一对*关系。不要忘记从导航项中隐藏您的业务对象EmailId。 EmailId 应该只对创建新的Employee 对象的用户可见,否则不应允许创建,与任何关系无关。
我知道这是一个很晚才回答的问题,但请告诉我们您是如何解决问题的。通过这样做,您可以帮助面临与您类似情况的其他人。 谢谢。
【讨论】:
创建一个没有链接回任何其他类的电子邮件类。然后创建需要收集电子邮件的类。现在你有两个选择。您可以向电子邮件类添加多个反向链接,并为每个父类添加正确的关联,或者您可以为每个父类创建单独的子(电子邮件)类。子类将继承自电子邮件,并且只将反向链接添加到父类。
【讨论】:
你可以使用这种类型; (如果你想自动生成密钥,我使用 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); }
}
}
【讨论】: