我正在开发具有以下业务对象的 DevExpress XAF 应用程序
员工仓库申请者
这些实体中的每一个都可以有一个或多个电子邮件地址
如何使用单个 EmailAddress 业务对象来完成此操作?
我正在开发具有以下业务对象的 DevExpress XAF 应用程序
员工仓库申请者
这些实体中的每一个都可以有一个或多个电子邮件地址
如何使用单个 EmailAddress 业务对象来完成此操作?
您可以使用一组 EmailAddress 对象 ( http://documentation.devexpress.com/#Xaf/CustomDocument2733 )引入基本持久类,然后从中继承其他类。作为继承的替代方法,您可以使用聚合。
但是,我不太确定您所说的“使用单个 EmailAddress 业务对象”是什么意思,可能您不需要我上面建议的集合属性。
PS 要获得有关 DevExpress 产品的保证和快速帮助,请使用官方支持中心 ( http://www.devexpress.com/Support/ ),在评估期间免费访问。
“这些实体中的每一个都可以有一个或多个电子邮件地址”
按照上面的陈述,我可以得出的是,你得到了Employee
一个业务对象,这些实体可以有多个EmailIds
. 我建议您将其创建EmailId
为仅具有一个属性的另一个业务对象,并且在您的业务对象和业务对象EmailId
之间具有 1 -to- * 关系。不要忘记从导航项中隐藏您的业务对象。应该只对创建新对象的用户可见,否则不应该被允许创建,独立于任何关系。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); }
}
}