我正在使用DataSet(請不要問爲什麼)與Oracle數據提供者(Oracel.DataAccess.dll),我不喜歡一些生成的代碼。有沒有辦法重寫DataSet的代碼生成器?
有沒有辦法來覆蓋DataSet的代碼生成器?如果我使用不同的數據提供者會怎麼樣?
我正在使用DataSet(請不要問爲什麼)與Oracle數據提供者(Oracel.DataAccess.dll),我不喜歡一些生成的代碼。有沒有辦法重寫DataSet的代碼生成器?
有沒有辦法來覆蓋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核心(這是我認爲你正在使用的爲好)。請注意,有兩種方法
公告的數據集是如何被填充了數據數據庫?
在這種情況下,我使用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
你可以寫partial類和功能性添加自己的功能,你喜歡