Entity Framework: Entity кэшируется при обновлении и повторном выборе в хранимой процедуре с использованием функции import - PullRequest
1 голос
/ 29 ноября 2011

Я использую EF4 с Visual Studio 2010 и SQL Server 2008 R2.

Я выбираю объект.После этого я вызываю хранимую процедуру, которая обновляет эту сущность, и повторно выбирает ее из базы данных.Когда я ловлю результат хранимой процедуры в коде, я вижу старые (ранее выбранные) свойства.

Очевидно, я смотрю на значение кэшированной сущности.Есть ли способ сообщить EF, что моя сущность была обновлена?Или какое-то магическое свойство?

Моя таблица базы данных (и сущность) выглядит примерно так:

CREATE TABLE [Message]
(
    ID int IDENTITY(1, 1) PRIMARY KEY,
    Content XML,
    StateID int NOT NULL,
)

Мой SP выглядит примерно так:

CREATE PROCEDURE sp_Queue_s
AS
BEGIN
    DECLARE @queue table ([ID] int NOT NULL)
    BEGIN TRAN
        INSERT INTO @queue
        SELECT [ID]
        FROM [Message]
        WHERE   StateID = 1

        UPDATE [Message]
        SET StateID = 2
        WHERE ID IN (SELECT ID FROM @queue)
    COMMIT TRAN
    -- Select the queue
    SELECT [ID], [Content], [Message]
    FROM [Message]
    WHERE [ID] IN (SELECT ID FROM @queue)
END

Мой код C # выглядит примерно так:

using (var context = new MyEntities())
            {
                int id = 1;
                var message = context.Messages.Single(m => m.ID == id);
                var messages = context.GetQueue(); // Function import of sp_Queue_s, maps on the Message entity
                var messageUpdated = messages.Single(m => m.ID == id);
            }

1 Ответ

3 голосов
/ 29 ноября 2011

GetQueue должен быть сгенерированным методом, внутренне вызывающим context.ExecuteFunction.ExecuteFunction имеет несколько перегрузок, и одна из них принимает MergeOption.Попробуйте позвонить ExecuteFunction напрямую с MergeOption.OverwriteChanges.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...