技术开发 频道

Subtext-数据库操作


【IT168技术文档】


  下面来看下Subtext的数据库操作设计模型

  DbProvider为抽象类,其定义了所有与数据操作相关的接口,SqlDataProvider则具体实现,其中如果是返回数据对象为IDataReader或者DataTable,接着是ObjectProvider,其定义的接口跟DbProvider差不多,但其返回的数据是一个真正的实体或集合了。DatabaseObjectProvider会调用SqlDataProvider的接口,然会再进行转换。
  接着再把实现的接口分摊,拆分。如Link的操作,则定义一个Links静态类,再调用DatabaseObjectProvider的接口,便于用户明确的调用接口,不然直接调用DatabaseObjectProvider,接口太多,可能会有点晕晕。不过个人感觉,这样的封装实在有点麻烦,特别是DbProvider可以直接处理,返回一个实体类型或集合。
其中还应用了Microsoft.ApplicationBlocks.Data .

  看一个应用吧,用代码说明一切。该省的就省了吧

1. public override IDataReader GetLinkReader(int linkID) { SqlParameter[] p = { DataHelper.MakeInParam("@LinkID",SqlDbType.Int,4,linkID), BlogIdParam }; return GetReader("subtext_GetSingleLink", p); } 2.GetReader会使用Microsoft.ApplicationBlocks.Data的接口 private IDataReader GetReader(string sql) { LogSql(sql, null); return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, sql); } 3.到了DatabaseObjectProvider public override Link GetLink(int linkID) { IDataReader reader = DbProvider.Instance().GetLinkReader(linkID); try { Link link = null; while(reader.Read()) { link = DataHelper.LoadLink(reader); break; } return link; } finally { reader.Close(); } } 4.DataHelper为辅助类,其帮助你把数据库数据读出来传给实体对象 public static Link LoadLink(IDataReader reader) { Link link = new Link(); // Active cannot be null link.IsActive = (bool)reader["Active"]; if(reader["NewWindow"] != DBNull.Value) { link.NewWindow = (bool)reader["NewWindow"]; } // LinkID cannot be null link.Id = ReadInt32(reader, "LinkID"); if(reader["Rss"] != DBNull.Value) { link.Rss = ReadString(reader, "Rss"); } if(reader["Url"] != DBNull.Value) { link.Url = ReadString(reader, "Url"); } if(reader["Title"] != DBNull.Value) { link.Title = ReadString(reader, "Title"); } if(reader["CategoryID"] != DBNull.Value) { link.CategoryID = ReadInt32(reader, "CategoryID"); } if(reader["PostID"] != DBNull.Value) { link.PostID = ReadInt32(reader, "PostID"); } return link; } 5.Links public static Link GetSingleLink(int linkID) { return ObjectProvider.Instance().GetLink(linkID); }
  Ok,完成,接着你便是调用GetSingleLink这个方法
 
  其他的差不多。数据库操作差不多就这样。
0
相关文章