如何在devExpress XAF中组织关系

时间:2014-11-21 09:39:48

标签: c# database orm devexpress xpo

即使在阅读在线文档后,我也无法理解所有这些[协会]的内容。我有这个数据库 enter image description here

如何在devExpress XAF(c#)中建立一对一的关系?例如,Очередь-ServIdtoУслуги - Id?我应该添加什么?

这是我的代码

СlassQueue是“Очередь”

[DefaultClassOptions, ObjectCaptionFormat("{0:ClientNumber}"), DefaultProperty("ClientNumber"), XafDisplayName("Моя очередь"), ImageName("BO_List")]
public class Queue : BaseObject
{
    public Queue(Session session) : base(session) { }


    private String _ClientStatus;
    [Size(50)]
    [XafDisplayNameAttribute("Статус")]
    public String ClientStatus
    {
        get { return _ClientStatus; }
        set { SetPropertyValue("ClientStatus", ref _ClientStatus, value); }
    }

      private int _ServId;
    [XafDisplayNameAttribute("Id")]
    public int ServId
    {
        get { return _ServIdr; }
        set { SetPropertyValue("ServId", ref _ServId, value); }
    }

    private int _ClientNumber;
    [XafDisplayNameAttribute("Номер в очереди")]
    public int ClientNumber
    {
        get { return _ClientNumber; }
        set { SetPropertyValue("ClientNumber", ref _ClientNumber, value); }
    }

    private DateTime _GetDate;
    [XafDisplayNameAttribute("Дата")]
    public DateTime GetDate
    {
        get { return _GetDate; }
        set { SetPropertyValue("GetDate", ref _GetDate, value);}
    }
}

服务是“Услуги”

 //Услуги
    public class Services : BaseObject
    {
        public Services(Session session) : base(session) { }
    private String _Name;
    [Size(SizeAttribute.Unlimited)]
    public String Name
    {
        get { return _Name; }
        set { SetPropertyValue("Name", ref _Name, value); }
    }
}

谢谢

2 个答案:

答案 0 :(得分:1)

定义对象之间关系的方式取决于您的业务逻辑要求。文档中描述了一对一关系:How to: Implement One-to-One Relationships。但是,您需要考虑两点:

  • 如果要映射到现有数据库,则不能以这种方式声明关系,因为Услуги表没有单独的列来引用Очередь表。因此,如果您无法更改数据库,则只能声明一对多关系;
  • 如果您要根据模型生成数据库,则可以根据需要声明关系。但是,我不确定你是否真的想要一对一的关系。我将进一步阐述这一点。

要确定您需要哪种类型的关联,您必须回答一个问题“如何向最终用户显示数据?”。

  • 如果要在显示队列详细信息数据时显示服务名称,请将Queue.ServId属性类型更改为“服务”。这就足够了。

  • 如果它不是一对一关系,并且将有多个与单个服务关联的队列项,则可能需要在显示服务详细信息数据时显示队列项的集合。为此,您需要声明完整关联。除了更改Queue类中的外键属性类型之外,还需要在Service类中声明一个collection属性。本文介绍了此技术:Introduction to One-to-Many Relationships

  • 仅当您需要逻辑限制用户将多个队列项目与单个服务项目相关联时,您才会声明一对一关联。在这种情况下,您需要更新数据库模式,因为Услуги表需要一个单独的列来存储对Очередь表的引用。

答案 1 :(得分:0)

  public class Departman : XPObject
{
    public Departman(Session session)
        : base(session)
    {
    }
    public override void AfterConstruction()
    {
        base.AfterConstruction();

    }

    [Association]
    public Fabrika Fabrika;

}

公共类Fabrika:XPObject     {         公共Fabrika(会话会议)             :基地(会话)         {         }         public override void AfterConstruction()         {             base.AfterConstruction();

    }
    [Association]
    public Departman Departman;

}

这是XAF中一对一关系的例子。更多示例:https://documentation.devexpress.com/eXpressAppFramework/113640/Getting-Started/Comprehensive-Tutorial/Business-Model-Design/Business-Model-Design-with-XPO/Business-Model-Design-with-eXpress-Persistent-Objects