WEB开发网
开发学院数据库MSSQL Server ORM: 开发自己的Data Access Application Block -... 阅读

ORM: 开发自己的Data Access Application Block - Part IIII

 2008-12-06 10:15:37 来源:WEB开发网   
核心提示: 通过stored procedure的方式和上面通过Command Builder的步骤差不多,首先通过Conection创建3个Command,ORM: 开发自己的Data Access Application Block - Part IIII(5),并指定Command type为C

通过stored procedure的方式和上面通过Command Builder的步骤差不多。首先通过Conection创建3个Command,并指定Command type为CommandType.StoredProcedure。通过storedProcedureNameMapping根据Table name获得对应的stored procedure的名称,并赋值给3个Command的CommandText属性。如果开始了Transaction,与之关联。通过DiscoverParameters方法(这个一个Abstract方法,需要在具体的Database 类脂Override)给Command发现参数。接着我们为3个Command的parameter指定SourceColumn和SourceVersion,其中SourceColumn通过我们配置的dbParameterNameMapping来获得。SourceVersion通过方法GetSourceVersion(这个一个Abstract方法,需要在具体的Database 类脂Override;这个方法根据参数名称来无额定对应的Source Version:Original or Current)来获取。最后调用DatabaseAdapter.Update方法实现 数据的跟新。

5. SQLDatabase & OracleDatabase

由于ADO.NET 2.0提供的很多基于泛型编程的功能,使得我们把觉得大部分Data Access操作放在了上面这个Abstract Database中,所以SQLDatabase & OracleDatabase上的逻辑很少。我们只看SQLDatabase。上面我们提到Abstract Database提供两个Abstract方法需要在具体的Database中实现的:DiscoverParameters和GetSourceVersion。实现上SQLDatabase之包含这两个方法:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
namespace Artech.ApplicationBlock.DataAccess
{
  /**//// <summary>
  /// Microsoft SQL Server Database
  /// </summary>
  public class SqlDatabase:Database
  {
    public SqlDatabase()
    {
      
    }
  
    /**//// <summary>
    /// Discover all of the parameters for the command realted stored procedure.
    /// </summary>
    /// <param name="command">Command</param>
    public override void DiscoverParameters(DbCommand command)
    {
      if (command.Connection.State != ConnectionState.Open)
      {
        command.Connection.Open();
      }
      SqlCommandBuilder.DeriveParameters(command as SqlCommand);
    }
  
    /**//// <summary>
    /// Get the DataRowVersion for the source column corresponding to the parameter based on the parameter name.
    /// </summary>
    /// <param name="parameterName"></param>
    /// <returns></returns>
    public override DataRowVersion GetSourceVersion(string parameterName)
    {
      //p_abc_def=>DataRowVersion.Current
      //o_abc_default=>DataRowVersion.Original
      if(parameterName.StartsWith("@o"))
      {
        return DataRowVersion.Original;
      }
      return DataRowVersion.Current;
    }
  }
}

上一页  1 2 3 4 5 

Tags:ORM 开发 自己

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接