Есть ли способ переопределить генератор кода для DataSet? - PullRequest
0 голосов
/ 03 марта 2011

Я использую DataSet (не спрашивайте почему) с поставщиком данных Oracle (Oracel.DataAccess.dll), и мне не нравятся некоторые из сгенерированного кода.

Есть ли способ переопределить генератор кода для DataSet? Что если я использую другой поставщик данных?

Ответы [ 2 ]

0 голосов
/ 03 марта 2011

То, что вы используете DataSets, не означает генерацию кода.Итак, что вы используете / делаете именно для генерации кода?

dataProvider также не подразумевает, что код генерируется.Вы можете получить прямой доступ к своим данным и заполнить свои наборы данных данными самостоятельно.

Например

#region GetPostsFeatured

internal DbDataReader GetPostsFeatured()
{
  using (var command = CreateCommandForGetPostsFeatured())
  {
    DbConnection.Open();
    return command.ExecuteReader(CommandBehavior.CloseConnection);
  }
}

internal DataSet GetPostsFeaturedDataSet()
{
  var adapter = DbProviderFactory.CreateDataAdapter();
  adapter.SelectCommand = CreateCommandForGetPostsFeatured();
  var ds = new DataSet();
  adapter.Fill(ds);
  return ds;
}

private DbCommand CreateCommandForGetPostsFeatured()
{
  var command = DbConnection.CreateCommand();
  command.CommandType = CommandType.StoredProcedure;
  command.CommandText = "GetPostsFeatured";
  var parameter = DbProviderFactory.CreateParameter();
  parameter.DbType = DbType.Int32;
  parameter.Direction = ParameterDirection.ReturnValue;
  parameter.ParameterName = "@RETURN";
  command.Parameters.Add(parameter);
  return command;
}

#endregion GetPostsFeatured

В приведенном выше коде используется ядро ​​ADO.NET (что, как я думаю, вы используете какЧто ж).Обратите внимание, что есть два метода

  1. GetPostsFeatured () - который возвращает DbDataReader
  2. GetPostsFeaturedDataSet () - который возвращает DataSet

Обратите внимание, как DataSetзаполняется данными из базы данных?

В этом случае я использую поставщик данных MS SQL, но это может быть любой поставщик данных.Все они поддерживают общий набор функций.

Код, который использует раздел строки подключения файла конфигурации и устанавливает соединение и т. Д., Показан ниже

  internal partial class DataModule
  {
    private DbProviderFactory DbProviderFactory { get; set; }
    private DbConnection DbConnection { get; set; }

    public DataModule()
    {
      var connectionStringSettings = ConfigurationManager.ConnectionStrings["Orion"];
      DbProviderFactory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName);
      DbConnection = DbProviderFactory.CreateConnection();
      DbConnection.ConnectionString = connectionStringSettings.ConnectionString;
    }
  }

В моем блоге есть статьяоб инструменте, который я написал, который генерирует код непосредственно из хранимых процедур (весь код, который я вам показал, это сгенерированный код).Также доступен исходный код инструмента, так что вы можете изменить сгенерированный код и все, что пожелаете. Уровень доступа к данным CodeGen

0 голосов
/ 03 марта 2011

Вы можете написать частичный класс и добавить свою собственную функцию с функционалом, который вам нравится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...