【发布时间】:2012-07-30 18:20:27
【问题描述】:
我有一个包含所有用户帐户详细信息的用户表,包括一个具有位数据类型的 IsLoggedIn 字段。当用户在前一个会话到期之前启动新会话时,我想用 IsLoggedIn = 1 更新任何旧行。实现这一目标的最佳方法是什么?用触发器可以做到这一点吗?
提前谢谢..
【问题讨论】:
标签: asp.net sql-server entity-framework-4
我有一个包含所有用户帐户详细信息的用户表,包括一个具有位数据类型的 IsLoggedIn 字段。当用户在前一个会话到期之前启动新会话时,我想用 IsLoggedIn = 1 更新任何旧行。实现这一目标的最佳方法是什么?用触发器可以做到这一点吗?
提前谢谢..
【问题讨论】:
标签: asp.net sql-server entity-framework-4
你肯定有两件事.. 1) 用户 ID 和 2) 数据库中的会话 ID。
现在当新的会话开始 (session_Start) 事件被触发时..你可以调用一个带有逻辑的存储过程,逻辑将是
1) 如果没有具有相同用户 ID 的记录,则不要进行任何更新。 2)如果有任何具有相同用户ID的记录,则将它们全部更新为IsLoggedIn = 1。
您也可以使用 TRIGGER 扩展此逻辑并根据需要对其进行绑定。
基本上你需要跟踪 session_Start 事件并执行数据库操作。
【讨论】:
触发器不是建议的解决方案,因为您需要从 UI 处理登录。如果只有一次登录,则可以使用Application_Start。如果可以有多个登录,那么Session_Start 更可取。从那里您可以调用数据库并执行相应的操作。
两者的区别在:http://forums.asp.net/t/1230163.aspx/1?What+s+the+difference+between+Application_Start+and+Session_Start+in+Global+aspx+
【讨论】: