我为System.Data.Common.DbProviderServices
类创建了一个包装器。我需要在这个包装器中编辑DbCommand.CommandText
。如何在CommandText
方法中获得CreateDbCommandDefinition
?
答案 0 :(得分:4)
DbCommandDefinition
类提供了返回DbCommand
的单个CreateCommand
方法,因此就像DbCommand
工厂一样。
假设您从包装的类中获得了DbCommandDefinition
个实例:
DbCommandDefinition commandDefinition = ...;
您可以从中创建DbCommand
并检查其所有属性,包括CommandText
:
var command = commandDefinition.CreateCommand();
var commandText = command.CommandText;
但是,您无法更改命令属性,因为每次调用都会创建一个新命令。因此,您需要创建并返回DbCommandDefinition
包装器。
最简单的是这样的(适用于实现DbCommand
的所有ICloneable
派生类,这意味着所有“普通”db提供程序DbCommand
实现,但不适用于EntityCommand
):
class DbCommandDefinitionWrapper : DbCommandDefinition
{
public DbCommandDefinitionWrapper(DbCommand prototype) : base(prototype) { }
}
并使用以下内容:
DbCommandDefinition commandDefinition = ...;
var command = commandDefinition.CreateCommand();
command.CommandText = ...;
commandDefinition = new DbCommandDefinitionWrapper(command);