在前面两节 自己动手写个ORM实现(1) , 自己动手写个ORM实现(2) 里我们分别实现了接口规范以及初步的查询功能.
接下来,我们将继续完成EntityManager的实现.
----------------------------------------------------------------------------------------------------------
自己动手写个ORM实现(3)
来到Delete<T>方法,功能也非常简单,根据传入的ID值来删除一个对象,实现如下
 1自己动手写个ORM实现(3)public void Delete<T>(int id) where T : IEntity
 2        }
这段代码大家应该一看就明白,就不多说了. 

然后是新增对象的方法 Create<T>
 1自己动手写个ORM实现(3)public T Create<T>(T t) where T : IEntity
 2        }

我们来看到上面代码的第7行,我们通过调用GetCreatedProperties<T>方法传入的对象实例,判断得出有那些属性已经赋值
 1        }

这里需要注意一点的是: 如果实体对象的某个实例是DateTime类型即使没有被复制,它也有一个初始值DateTime.MinValue,因此不能简单判断它是否为null.
接着,我们通过得到的PropertyInfo集合来生成执行sql操作所必要的字段和参数值.
        }
如此,新增实体的功能就初步实现了.

然后是更新的方法 Update<T>
 1自己动手写个ORM实现(3)public void Update<T>(T t) where T : IEntity
 2}
首先得判断传入的实体对象是否已持久化,也就是说这里的实例是否在数据库中存在一条记录与其对应, 如果没有的话则返回.
而通过GetUpdatedProperties<T>方法, 我们可以得到该对象对比已持久化在数据库中的状态有哪些属性做过了更改操作, 这样一来就可以有针对性的只更新改变过值的属性.
实现如下
 1        }

通过得到的已更改过的属性集合,生成执行sql时所需要的参数值,如下
 1        }
最后借助企业库的数据模块执行生成好的sql语句,我们的更新功能也将完成.
---------------------------------------------------------------------------------------------------------------------------------------------
经过前三节的工作,我们一起完成了最简单的crud操作. 在接下来的章节我们将就性能优化,实体关联,事务等对已有的功能实现进行扩展.

相关文章: