【问题标题】:MVC Session Variables in ApplicationDbContextApplicationDbContext 中的 MVC 会话变量
【发布时间】:2017-03-31 08:40:51
【问题描述】:

如何在ApplicationDbContext constructor 中使用Session Variables。我想从 Session 变量中传递构造函数的第二个参数。

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IDbModelCacheKeyProvider, IDisposable
    {
 public ApplicationDbContext(string schemaname, string connString = HttpContext.Current.Session["ConnString"].ToString())
            : base(connString)
        {            
            SchemaName = schemaname;
            ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 180;
        }

}

它给了我HttpContext 的错误,即“当前上下文中不存在 HttpContext”。即使我已经为这个类添加了命名空间。

【问题讨论】:

标签: c# asp.net-mvc asp.net-mvc-4 model-view-controller


【解决方案1】:

参数的默认值应该是编译时常量(应该在编译时知道)。 HttpContext.Current.Session["ConnString"].ToString() 当然在编译时是不知道的,所以你不能把它作为connString 参数的默认值。

你可以做的是创建另一个构造函数:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IDbModelCacheKeyProvider, IDisposable {
    public ApplicationDbContext(string schemaname, string connString)
        : base(connString) {                
        SchemaName = schemaname;
        ((IObjectContextAdapter) this).ObjectContext.CommandTimeout = 180;
    }

    public ApplicationDbContext(string schemaname)
       : this(schemaname, HttpContext.Current.Session["ConnString"].ToString())
    {            
    }
}

【讨论】:

  • 我可以使用 cookie 值吗?
  • 问题不在于会话本身,而在于 any 方法的默认值如何工作。我已经用一个选项更新了答案来解决这个问题。
  • 我已经使用using (var ctx = new ApplicationDbContext(schemaName)) { .. } 200多种方法了。
  • @Anup 再次更新,这次应该符合您的要求。
  • 当我运行应用程序时,它给了我错误:- System.NullReferenceException: Object reference not set to an instance of an object. Line 92: public ApplicationDbContext(string schemaname)
猜你喜欢
  • 2018-05-20
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多