asp.net-mvc - 我可以将 session 状态存储在 ASP.NET MVC 应用程序的现有 SQL Azure DB 中吗?

标签 asp.net-mvc asp.net-mvc-3 azure azure-sql-database asp.net-session

我使用代码优先风格的 EF4.1 在 SQL Azure DB“MyAppsDB”中为基于 ASP.NET MVC 3 的小型 Web 应用程序保留 POCO 对象。当表不存在时,系统会在 MyAppsDB 中自动创建这些表。我想在 SQL Azure 上托管该应用程序,但我不想每月支付 10 美元购买额外的 1GB 数据库来存储 50MB 的 session 状态,而且使用缓存会更加昂贵。

我想将 session 状态与我的应用程序模型一起存储在 MyAppDB 中。有没有办法做到这一点? 如果 session 表不存在,我可以自动创建它吗?与 EF 代码优先模型相同吗?

我尝试按如下方式修改我的 web.config:

<sessionState mode="Custom" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      connectionStringName="MyAppDBContext" applicationName="/" />
  </providers>
</sessionState>

但它提示 session 表不存在。如果我创建 session 表,EF4.1 会提示数据库元数据不符合其预期。

最佳答案

当然可以使用现有的 SQL Azure 数据库作为 session 状态。我正在这样做(并且出于完全相同的原因)。标准脚本不起作用,因为它们与 SQL Azure 不兼容。在某个地方(我不记得在哪里,但我有一个 Google)有一些更新的脚本,我用来设置数据库。

不过,这不是代码优先。您也许能够对架构进行逆向工程,但是涉及到许多存储过程。

请注意,您还需要考虑清理过期的 session 。有一个存储过程需要定期运行(我认为DeleteExpiredSessions),典型的建议是从辅助角色运行它。但是您不会希望部署辅助角色的唯一目的是定期运行存储过程!

编辑:在 this page 上找到脚本。请注意,主文章中发布的脚本存在问题,但 Peter McEvoy 的评论中在页面下方有一个修改过的脚本。

有些人建议优先使用 Azure 表存储 session 状态提供程序,如果我尚未使用 SQL Azure,我会倾向于同意。但是我在使用 Azure 提供程序时遇到了问题(特别是在开发环境中),但在部署更新的脚本后使用 SQL Server session 状态就完全没有问题了。

编辑 2:我已经取得了进一步的进展,我会将其写在我的博客中并在此处发布链接。

亮点是:

  • 针对空数据库运行 InstallSqlState.SQL 脚本(针对 Azure 的修改版)
  • 使用 EF Power Tools 将 ASP 状态表逆向工程转换为 EF Code-First
  • 将逆向工程类集成到您的模型和上下文中
  • 修改 ASPStateTempSessions 表的映射以使用 Image 列类型
  • 从 InstallSqlState.SQL 创建一个新的 SQL 脚本,该脚本仅创建存储过程
  • 修改存储过程以始终指定默认值
  • 添加一些代码以在 Initializer Seed() 方法中运行 SQL 脚本

我想就这些了,但是当我写完它时,我会在我的博客上给出更完整的描述。

编辑3:

我的文章的第一部分现在是 on my blog 。第二部分即将推出(但现在该 sleep 了)。

编辑4:

Part II现在也写了。

关于asp.net-mvc - 我可以将 session 状态存储在 ASP.NET MVC 应用程序的现有 SQL Azure DB 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7015309/

相关文章:

javascript - 未捕获的类型错误 : Cannot set property 'unobtrusive' of undefined

python - 尝试连接到 Azure Sql 数据库时,用户 'user' 登录失败

asp.net-mvc-3 - 什么是 ASP.NET MVC 中服务层的好例子?

javascript - MVC 3 使用 dropdownlist 和 ajax 获得新模型

asp.net-mvc-3 - 填充基本 View 模型的最佳方法

c# - 存储获取 blob TaskCanceledException

Azure 逻辑应用程序 - 如何将文件从字节数组上传到 Azure Blob 存储

asp.net - 从 Paypal 网站返回后,使用 Paypal 付款不起作用

c# - PartialView 中的 SignalR 客户端未接收到

asp.net - 更新 Controller 中的 View 模型数据不会反射(reflect)在 View 的输入字段中