从DbCommandDefinition获取CommandText

时间:2018-06-09 12:59:55

标签: c# .net entity-framework

我为System.Data.Common.DbProviderServices类创建了一个包装器。我需要在这个包装器中编辑DbCommand.CommandText。如何在CommandText方法中获得CreateDbCommandDefinition

1 个答案:

答案 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);