我正在开发一个具有以下业务对象的DevExpress XAF应用程序
员工 仓库 申请人
这些实体中的每一个都可以有一个或多个电子邮件地址
如何使用单个EmailAddress业务对象完成此操作?
答案 0 :(得分:2)
您可以引入一个带有EmailAddress对象集合(http://documentation.devexpress.com/#Xaf/CustomDocument2733)的基类持久化类,然后从中继承其他类。 作为继承的替代方法,您可以使用聚合。
但是,我不太确定“使用单个EmailAddress业务对象”究竟是什么意思,可能您不需要我上面建议的集合属性。
P.S。 要获得DevExpress产品的保证和快速帮助,请使用官方支持中心(http://www.devexpress.com/Support/),在评估期间免费访问。
答案 1 :(得分:0)
"这些实体中的每一个都可以有一个或多个电子邮件地址"
按照上面的说法,我可以得到的是,您将Employee
作为业务对象,这些实体可以有多个EmailIds
。我建议您将EmailId
创建为另一个只包含一个属性EmailId
的业务对象,并在Employee
和EmailId
业务对象之间建立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); }
}
}