|
set{product["CurrentCount"]=value;}
}
public int ObjectCount
{
get
{
return product.EntityCount;
}
}
public EntityData EntityData
{
get
{
return product;
}
set
{
product=value;
}
}
public bool Next()
{
return product.Next();
}
public void First()
{
product.First();
}
public void AddNew()
{
product.NewRecord();
}
}
可以看出,采用这种方式,Product类既可以代表一个单个的Product对象,也可以包含一个Product对象集合,并且可以通过Next和First方法来遍历。
如果要表示一对多的对象结构,我们可以采用如下的方式(表明了一个入库单的结构,这个入库单包含了入库单头和相关明细):
public class Form : PersistenceCapable
{
private EntityData form;
private FormDetail formDetail;
#region 构造函数
public Form() : this(true)
{}
public Form(bool AutoInit)
{
form=EntityPrototypeManager.GetEmptyEntity("Form");
if(AutoInit)
form.NewRecord("Form");
}
public Form(EntityData entity)
{
form=entity;
}
#endregion
#region 属性
public string FormID
{
get{return form["FormID","Form"].ToString();}
set{form["FormID","Form"]=value;}
}
public DateTime FormTime
{
get{return form.GetDateTime("FormTime","Form");}
set{form["FormTime","Form"]=value;}
}
public FormDetail FormDetail
{
get
{
if(formDetail==null)
{
formDetail=new FormDetail(form);
}
return formDetail;
}
}
#endregion
#region PersistenceCapable 成员
public int ObjectCount
{
get
{
return form.EntityCount;
}
}
public EntityData EntityData
{
get
{
return form;
}
set
{
form=value;
}
}
public bool Next()
{
return form.Next("Form");
}
public void First()
{
form.First("Form");
}
public void AddNew()
{
form.NewRecord("Form");
}
#endregion
}
public class FormDetail : PersistenceCapable
{
private EntityData form;
#region 构造函数
public FormDetail() : this(true)
{}
public FormDetail(bool AutoInit)
{
form=EntityPrototypeManager.GetEmptyEntity("Form");
if(AutoInit)
form.NewRecord("FormDetail");
}
public FormDetail(EntityData entity)
{
form=entity;
}
#endregion
#region 属性
public string FormDetailID
{
get{return form["FormDetailID","FormDetail"].ToString();}
set{form["FormDetailID","FormDetail"]=value;}
}
public string FormID
{
get{return form["FormID","FormDetail"].ToString();}
set{form["FormID","FormDetail"]=value;}
}
public string ProductID
{
get{return form["ProductID","FormDetail"].ToString();}
set{form["ProductID","FormDetail"]=value;}
}
public decimal InCount
{
get{return form.GetDecimal("InCount","FormDetail");}
set{form["InCount","FormDetail"]=value;}
}
#endregion
#region PersistenceCapable 成员
public int ObjectCount
{
get
{
return form.Tables["FormDetail"].Rows.Count;
}
}
public EntityData EntityData
{
get
{
return form;
}
set
{
form=value;
}
}
public bool Next()
{
return form.Next("FormDetail");
}
public void First()
{
form.First("FormDetail");
}
public void AddNew()
{
form.NewRecord("FormDetail");
}
#endregion
}
数据的存取方式
数据存取的目的,是持久化保存对象。在Websharp中,定义了PersistenceManager接口来实现这个功能。PersistenceManager的定义可以见:附1:Websharp主要接口定义——PersistenceManager
我们可以使用如下的方式来持久化保存一个对象:
Product product=new Product (true);
……//处理product
PersistenceManager pm = PersistenceManagerFactory.Instance().
CreatePersistenceManager();
pm.PersistNewObject(p);
pm.Close();
代码非常简明和直观,没有一大堆数据库操纵的代码,也不容易发生差错。
也可以通过向PersistenceManagerFactory 传递一个PersistenceProperty参数来初始化一个PersistenceManager,如:
PersistenceProperty pp=new PersistenceProperty();
pp……//设置pp的属性
PersistenceManager pm = PersistenceManagerFactory.Instance().CreatePersistenceManager(pp);
关于PersistenceProperty的说明,可以见后面的系统持久化配置信息一节。
事务处理
在很多时候,在处理对象保存的时候,我们需要使用事务处理,特别是在处理上上面示例中的类似于入库单的一对多结构的对象的时候。在Websharp中,我们可以通过Transaction 接口来完成这个功能。Transaction接口的定义可以见:附1:Websharp主要接口定义——Transaction
下面是使用事务处理的一个例子:
Product product=new Product (true);
……//处理product
PersistenceManager pm = PersistenceManagerFactory.Instance().
CreatePersistenceManager();
Transaction trans=pm.CurrentTransaction;
trans.Begin();
try
{
pm.PersistNewObject(p);
trans.Commit();
}
catch(Excption e)
{
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
|