数据持久化关联对象加载构想
在数据持久化组件中关联对象加载是个比较困扰的问题,因为在实际应用中加载的情况还是比较多的;如即时加功、延时加载、加载父对象、加载子对象或加载指定关系类型的对象。用一个全局性的配置基本不可能适应多变的加载方式;即使固定到具体关系上也并不理想,因为根据业务处理不同加载的情况是有所变化的。就是因为加载的复杂性所以自己编写的持久组件中一直没有把关系加载处理表现出来(即使存在这功能,主要是使用上不灵活)。经过一段时间的思考发现一种比较理想的加载方式,加载方式是引入一个关系数据加载上下文对象,开发人员获取数据后对上下文对象进行设置加载方式即可实现自动关联加载;整个加载过程还是透明的只是需要开发员通过上下文对象指定加载的方式。
预想处理过程:
预想调用代码:
(DBMapping.Orders.EmployeeID == 1).List<Orders>();
//设置加载方式,当为集合是为延时加载
LoadContext.Load<Employees, OrderDetails>();
//即时加载
LoadContext.Load<Employees, OrderDetails,Customers>(true);
当不调用LoadContext时不处理关联对象加载。
关系属性设定:
一对多关联子
[Loader(RelationType.Many,"OrderID")]
public List<OrderDetails> Items
{
}
一对一关联子
[Loader(RelationType.One,"EmployeeID")]
public Employees Employee
{
}
一对一父关联
[Loader(RelationType.One|RelationType.Parent,"EmployeeID")]
public Employees Employee
{
}
多对多(还在构想)
这种加载方式虽然可以提供加载的灵活性,但在加载规则调用上比较严紧。当加载数据后需要处理关联加载就必须调用上下文对象;因为下次加载就会冲丢上一次的历史数据(数据存储是线程级的保证关联加载的线程安全性)。以上功能还是构想阶段并没有任何代码实现,毕竟还需要详细思考具体情况所面对的问题(主要还是使用方便上)。