我正在开发具有以下业务对象设计XAF Business Objects公司
员工 仓库 申请人
每个实体可以有一个或多个电子邮件地址
如何一DevExpress的XAF应用我可以使用单个EmailAddress业务对象完成此操作吗?
我正在开发具有以下业务对象设计XAF Business Objects公司
员工 仓库 申请人
每个实体可以有一个或多个电子邮件地址
如何一DevExpress的XAF应用我可以使用单个EmailAddress业务对象完成此操作吗?
您可以引入带有一组EmailAddress对象(http://documentation.devexpress.com/#Xaf/CustomDocument2733)的基本持久化类,然后继承其他类。 作为继承的替代方法,您可以使用聚合。
但是,我不太清楚“使用单个EmailAddress业务对象”的含义,可能您并不需要如上所述的集合属性。
P.S. 为了得到DevExpress产品的有保证和快速的帮助,请使用官方支持中心(http://www.devexpress.com/Support/),在评估期间内免费访问。
“每个实体可以有一个或多个电子邮件地址”
去通过上面的说法,有什么我可以做出来就是,你有Employee
作为业务对象和这些实体可以有多个EmailIds
。我建议你创建EmailId
作为另一个业务对象,只有一个属性EmailId
,并且在Employee
和EmailId
业务对象之间有1对1的关系。不要忘记从导航项目中隐藏您的业务对象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); }
}
}