有没有办法覆盖DataSet的代码生成器?

时间:2011-03-03 08:06:55

标签: c# oracle visual-studio-2010 code-generation

我正在使用DataSet(请不要问为什么)与Oracle数据提供程序(Oracel.DataAccess.dll),我不喜欢生成的代码。

有没有办法覆盖DataSet的代码生成器?如果我使用其他数据提供商该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以编写partial课程并添加您喜欢的功能

答案 1 :(得分:0)

仅仅因为您使用DataSet并不意味着代码生成。那么你正在使用/做什么产生代码呢?

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
  3. 注意如何使用数据库中的数据填充DataSet?

    在这种情况下,我使用的是MS SQL数据提供者,但它可以是任何数据提供者。它们都支持一组通用的功能。

    使用配置文件的connectionstring部分并实例化连接等的代码如下所示

      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;
        }
      }
    

    在我的博客上,有一篇关于我编写的工具的文章,它直接从存储过程生成代码(我在这里展示的所有代码都是生成的代码)。该工具的源代码也可用,因此您可以修改生成的代码和您想要的任何其他内容。 Data Access Layer CodeGen