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生成的字段,来作为主键。