MySoft.Data发现系列一:实体的解耦
2010-03-16 17:23
363 查看
自老毛开始发布他的MySoft.Data系列组件,也陆续开始写Mysoft.Data使用系列的文章,我也尝试着写一点自己在研究和使用MySoft.Data过程中的一些心得。
本章介绍Mysoft.Data在作为一个ORM组件应用在系统中时,如何把MySoft.Data生成的实体转换成“干净”的实体,以实现系统和ORM之间的解耦。
大家都知道,一般ORM组件会有他们自己的特定的实体,例如EF的实体,或者其他ORM组件的实体,要么通过Attribute标记,要么xml文档配置,总而言之就是要把实体的结构跟数据表结构联系起来,MySoft.Data也不例外,大家来看它生成的实体:
代码 1 /// <summary>
2 /// 获取评论列表
3 /// </summary>
4 /// <param name="status">状态</param>
5 /// <param name="pageNumber">页码</param>
6 /// <param name="pageSize">分页大小</param>
7 /// <returns></returns>
8 public IList<IComments> GetList(CommentStatus status, int pageNumber, int pageSize)
9 {
return repository.GetSession().From<Comments>()
.Where(Comments._.CommentStatus == status)
.OrderBy(Comments._.CommentTimeGMT.Desc)
.GetPage(pageSize)
.ToList(pageNumber).ConvertTo<CommentsModel, IComments>();//这里转化了成了SourceList<IComments>,而由于SourceList实现了IList<T>,因此兼容IList<IComments>了
}
//再来看这几个个扩展方法
/// <summary>
/// 转换成实体
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="entity"></param>
/// <returns></returns>
public static TEntity ToEntity<TEntity>(this DsJian.Interface.Model.IEntity entity)
where TEntity : MySoft.Data.Entity
{
return new MySoft.Data.SourceList<DsJian.Interface.Model.IEntity>(entity).ConvertTo<TEntity>()[0];
}
/// <summary>
/// 转换成实体
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="entity"></param>
/// <returns></returns>
public static TEntity ToEntity<TEntity>(this MySoft.Data.Entity entity)
{
return new MySoft.Data.SourceList<MySoft.Data.Entity>(entity).ConvertTo<TEntity>()[0];
}
/// <summary>
/// 转换成接口
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="IEntity"></typeparam>
/// <param name="entity"></param>
/// <returns></returns>
public static IEntity ToIEntity<TEntity, IEntity>(this MySoft.Data.Entity entity)
where IEntity : DsJian.Interface.Model.IEntity
{
return new MySoft.Data.SourceList<MySoft.Data.Entity>(entity).ConvertTo<TEntity, IEntity>()[0];
}我不用说,大家也该知道怎么用了。
OK,我是个不怎么会写东西的人,文章中可能有什么胡言乱语的云云,请大家爱护环境,留住你们手中紧攥的臭鸡蛋,谢谢!
本章介绍Mysoft.Data在作为一个ORM组件应用在系统中时,如何把MySoft.Data生成的实体转换成“干净”的实体,以实现系统和ORM之间的解耦。
大家都知道,一般ORM组件会有他们自己的特定的实体,例如EF的实体,或者其他ORM组件的实体,要么通过Attribute标记,要么xml文档配置,总而言之就是要把实体的结构跟数据表结构联系起来,MySoft.Data也不例外,大家来看它生成的实体:
代码 1 /// <summary>
2 /// 获取评论列表
3 /// </summary>
4 /// <param name="status">状态</param>
5 /// <param name="pageNumber">页码</param>
6 /// <param name="pageSize">分页大小</param>
7 /// <returns></returns>
8 public IList<IComments> GetList(CommentStatus status, int pageNumber, int pageSize)
9 {
return repository.GetSession().From<Comments>()
.Where(Comments._.CommentStatus == status)
.OrderBy(Comments._.CommentTimeGMT.Desc)
.GetPage(pageSize)
.ToList(pageNumber).ConvertTo<CommentsModel, IComments>();//这里转化了成了SourceList<IComments>,而由于SourceList实现了IList<T>,因此兼容IList<IComments>了
}
//再来看这几个个扩展方法
/// <summary>
/// 转换成实体
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="entity"></param>
/// <returns></returns>
public static TEntity ToEntity<TEntity>(this DsJian.Interface.Model.IEntity entity)
where TEntity : MySoft.Data.Entity
{
return new MySoft.Data.SourceList<DsJian.Interface.Model.IEntity>(entity).ConvertTo<TEntity>()[0];
}
/// <summary>
/// 转换成实体
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="entity"></param>
/// <returns></returns>
public static TEntity ToEntity<TEntity>(this MySoft.Data.Entity entity)
{
return new MySoft.Data.SourceList<MySoft.Data.Entity>(entity).ConvertTo<TEntity>()[0];
}
/// <summary>
/// 转换成接口
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="IEntity"></typeparam>
/// <param name="entity"></param>
/// <returns></returns>
public static IEntity ToIEntity<TEntity, IEntity>(this MySoft.Data.Entity entity)
where IEntity : DsJian.Interface.Model.IEntity
{
return new MySoft.Data.SourceList<MySoft.Data.Entity>(entity).ConvertTo<TEntity, IEntity>()[0];
}我不用说,大家也该知道怎么用了。
OK,我是个不怎么会写东西的人,文章中可能有什么胡言乱语的云云,请大家爱护环境,留住你们手中紧攥的臭鸡蛋,谢谢!
相关文章推荐
- MySoft.Data从入门到精通系列(二)【生成实体续(插件的使用)】
- MySoft.Data从入门到精通系列(一)【生成实体】
- MySoft.Data从入门到精通系列(四)【数据插入】
- MySoft.Data从入门到精通系列(三)【DbSession的配置】
- MySoft.Data从入门到精通系列(五)【数据更新】
- MySoft.Data新版v2.7.3 beta发布,修正较多bug,新增功能尚未完全测试
- MySoft.Data ORM组件之获取插入后的自增主键
- MySoft.Data v2.7.3 stable 版本发布,新增部分功能,并修复其中的已知的bug
- #ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data
- 让MySoft.Data也能有Discuz!NT的数据库查询分析工具
- MySoft.Data从入门到精通系列篇
- DLINQ 使用DataContext快速构建数据访问层DAL,发现Updata采用Attach(Entity t,true)困难重重!(如果实体声明了版本成员或者没有更新检查策略,则只能将它附加为没有原始状态的已修改实体)的解决办法!
- MySoft.Data 2.7.3版本的GitHub托管(ORM升级封装)
- Linq to Sql 学习系列之二 DataContext与实体
- [转]DPM2012系列之一:安装Data Protection Manager 2012
- Oracle Data Pump 工具系列:如何重新安装 DataPump EXPDP/IMPDP 工具
- 持久化API(JPA)系列(三)实体Bean的开发技术-建立与数据库的连接
- Dynamics CRM 2011编程系列(53):客户端实体序列化工具--MagicBox
- Spring Data操作Redis时,发现key值出现 \xac\xed\x00\x05t\x00\tb
- CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维