I have a custom DbDataReader in my application, which overrides GetDateTime method to change DateTimeKind.
public class MyDbDataReader : BaseDbDataReader
{
private string _dbName;
public MyDbDataReader(string dbName, DbDataReader source) : base(source)
{
_dbName = dbName;
}
public override DateTime GetDateTime(int ordinal)
{
var tableName = base.GetSchemaTable().TableName; //this doesn't work
return DateTime.SpecifyKind(base.GetDateTime(ordinal), base.GetName(ordinal).EndsWith("UTC", StringComparison.OrdinalIgnoreCase) ? DateTimeKind.Utc : DateTimeKind.Local);
}
}
Here is my BaseDbDataReader:
public abstract class BaseDbDataReader : DbDataReader
{
readonly DbDataReader source;
public BaseDbDataReader(DbDataReader source)
{
this.source = source;
}
...
public override DataTable GetSchemaTable() { return source.GetSchemaTable(); }
}
This dbReader is used in my custom interceptor:
public class MyInterceptor : DbCommandInterceptor
{
public override void ReaderExecuted(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
{
base.ReaderExecuted(command, interceptionContext);
if (!command.Connection.Database.Equals("...") &&
!(interceptionContext.Result is MyDbDataReader) &&
interceptionContext.Result != null &&
interceptionContext.Exception == null)
{
interceptionContext.Result = new MyDbDataReader(command.Connection.Database, interceptionContext.Result);
}
}
}
And all i want here, is to get the TableName in GetDateTime method. But GetSchemaTable method returns an incomprehensible result, where the TableName property equals to "SchemaTable". What i'm doing wrong here and how to get correct table name (like "Users").
Note: i dont use SqlCommand and SqlCommand.ExecuteReader to execute queries. I just use dbSet. I.e dbContext.Users.Where(x => x.Id = 1).Single();