代码改变世界

XPO学习(2)----关系(一对多)

2011-10-17 18:05  OOA  阅读(665)  评论(0编辑  收藏  举报

任务:

创建一个能够查看和修改 ”客户-订单 “的应用程序,一个客户对应多个订单。关系如图:

解决方案:

1.和上一节一样添加一个Customer 的持久类;添加两个属性:Name和Age;

2.添加Order的持久类:添加两个属性:ProductName,OrderDate;

        public string ProductName;
public DateTime OrderDate;

3.为两个持久类添加一对多关系:分别在Order类和Customer类中各添加一个属性,并且应用Association特性。代码如下:

Order类:

        [Association("Customer-Orders")]
public Customer Customer
{
get { return _customer; }
set { SetPropertyValue("Customer", ref _customer, value); }
}

Customer类:

        [Association("Customer-Orders")]
public XPCollection<Order> Orders { get { return GetCollection<Order>("Orders"); } }

说明:Association特性是用来为属性指定关系的,其中参数就是所指定的关系的名称。

   XPColleciton<T>是一个对象集合的泛型类。GetColleciton(string 属性名称) :它用来返回所有的持久化对象。

4.为在窗体启动时添加些记录,在FormLoad事件里 添加如下代码:

        private void Form1_Load(object sender, EventArgs e)
{
Customer cm = new Customer();
cm.Name = "John";
cm.Age = 21;
Order order = new Order();
order.ProductName = "Chai";
order.OrderDate = new DateTime(2006, 5, 17);
cm.Orders.Add(order);
order = new Order();
order.ProductName = "Konbu";
order.OrderDate = new DateTime(2006, 8, 23);
cm.Orders.Add(order);
xpCollection1.Add(cm);
cm.Save();

cm = new Customer();
cm.Name = "Bob";
cm.Age = 37;
order = new Order();
order.ProductName = "Queso Cabrales";
order.OrderDate = new DateTime(2006, 2, 9);
cm.Orders.Add(order);
xpCollection1.Add(cm);
cm.Save();

}

5.界面设计.拖拽一个GridControl 和一个XPCollection 

设置XPCollection的ObjectClassInfo属性为Customer (注意先生成一下项目,要不看不到),然后设置gridcontrol的DataSource属性。ok,启动调试。界面如下




结束语:

这一节我们实现了一对多关系的简单应用。至于gridcontrol的使用没有过多赘述,因为以前接触过。

我们看看数据库,关系创建OK了。OID字段是XPO生成的字段,来作为主键。