Я использую SqlDataSource с длительностью кэша 10 секунд.Если я изменю возвращенный объект DataView и снова выполню тот же запрос, SqlDataSource вернет DataView, как я модифицировал его в первый раз.
Я ожидаю, что SqlDataSource вернет мне кэшированный результирующий набор, но не представление данных, как я его модифицировал.
for (int n = 0; n < 2; n++)
{
SqlDataSource ds = new SqlDataSource();
ds.SelectCommand = "SELECT [SomeField] FROM [SomeTable] WHERE [Condition] = 1";
ds.CacheDuration = 10;
DataView dv = (DataView)ds.Select(new DataSourceSelectArguments());
string originalValue = dv.Table.Rows[0][0].ToString();
dv.Table.Rows[0][0] = "Some Value";
bool areEqual = string.Equals(originalValue, dv.Table.Rows[0][0]);
if (areEqual && n==1)
{
// This condition always evaluate to true, proving the issue.
}
}
В приведенном выше псевдокоде команда во второй развыполненный, он вернет представление данных, как я изменил его в первый раз.Если я отключу кэширование, проблема исчезнет, но мне интересно, почему кэширование вернуло бы представление данных, поскольку я изменил его, вместо того, чтобы возвращать мне представление данных, которое первоначально было возвращено сервером.
Обходное решение, которое я используюклонирует исходный вид данных и модифицирует этот клон, вместо того, чтобы работать непосредственно с исходным видом данных.
С нетерпением ждем ваших мыслей.
Сердечно, Агустин.