zoukankan      html  css  js  c++  java
  • Subtext数据库操作

            Subtext的数据模型仍然是现有.net推荐的Provider模式,Provider模式具体可以参考以下两篇文章

    设计模式 - Provider Pattern(提供者模式)

    .NET 2.0的Provider模式

    下面来看下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为辅助类,其帮助你把数据库数据读出来传给实体对象



    5.Links

            public static Link GetSingleLink(int linkID)
            
    {
                
    return ObjectProvider.Instance().GetLink(linkID);
            }

    Ok,完成,接着你便是调用GetSingleLink这个方法

    其他的差不多。数据库操作差不多就这样。
  • 相关阅读:
    什么是首次适应算法,该算法的特点是什么?
    用上、下界防护方法是如何实现界地址保护?在硬件上需要什么支持?
    什么是存储保护?
    什么是静态地址重定位,它需要什么支持?什么是动态地址重定位,他需要什么支持?静态地址重定位与动态地址重定位有什么区别?
    什么是逻辑地址,什么是物理地址,为什么要进行二者的转换工作?
    三个进程共享四个同类资源,这些资源的分配与释放只能一次一个。已知每一个进程最多需要两个资源,试问,该系统会发生死锁吗?为什么?
    试举出一种一种避免死锁的发生的方法,并说明为什么能避免死锁的发生?
    产生死锁的原因是什么?产生死锁的必要条件是什么?
    什么是死锁,试举例说明?
    说出两种一笔调度的算法,并说出这两种移臂调度算法的定义。
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/703609.html
Copyright © 2011-2022 走看看