SqlDataSource возвращает измененную таблицу данных, когда включено кэширование. - PullRequest
0 голосов
/ 30 января 2012

Я использую 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.
        }

    }

В приведенном выше псевдокоде команда во второй развыполненный, он вернет представление данных, как я изменил его в первый раз.Если я отключу кэширование, проблема исчезнет, ​​но мне интересно, почему кэширование вернуло бы представление данных, поскольку я изменил его, вместо того, чтобы возвращать мне представление данных, которое первоначально было возвращено сервером.

Обходное решение, которое я используюклонирует исходный вид данных и модифицирует этот клон, вместо того, чтобы работать непосредственно с исходным видом данных.

С нетерпением ждем ваших мыслей.

Сердечно, Агустин.

...