【发布时间】:2011-11-29 13:45:23
【问题描述】:
我将 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);
}
【问题讨论】:
-
能否展示EF为
GetQueue方法生成的代码?
标签: c# entity-framework-4