ASP.NET MVC / LINQ - 检索表和连接数

时间:2010-08-07 22:18:23

标签: c# asp.net-mvc linq-to-sql

对整个MVC / LINQ来说仍然是一个非常新的东西。我正在建立博客的过程中,我需要为帖子建立一个表格,并在每个帖子中为该帖子的评论构建一个表格。

要构建表格,我正在做类似的事情:

postsTable = (new DataContext(connectionString)).GetTable<Post>();

不幸的是,对于每个评论表,它都做同样的事情。我看到DataContext(connectionString)并假设它每次重新连接。我觉得我应该能够在获取开始时连接一次,然后在完成后关闭连接。我做错了吗?

3 个答案:

答案 0 :(得分:-1)

转到http://www.asp.net/MVC并查看教程和入门套件,有很多好文章可以告诉你你在找什么

答案 1 :(得分:-1)

由于您正在使用LINQ to SQL,因此可以......

  1. 使用适当的外键关系在数据库中定义博客和评论表。
  2. 将两者拖放到dbml设计器表面上。单击“保存”按钮;这是代码生成的时候。
  3. 当您填充视图模型(或者您将数据恢复为控制器操作的结果)时,只查询当时所需的信息。
  4. 对于具有关联注释的博客条目的单个视图,LINQ查询可能看起来像......

        YourDataContext dataContext = new YourDataContext();
        var blogData = (from b in dataContext.Blogs
           where b.BlogId == 1
           select b).SingleOrDefault();
    
    // you should now have a single blog instance with a property named Comments.  Set the 
    // fetch mode to eager if you plan to always show the comments; leave it lazy to only do 
    // the lookup if necessary.  Execute all of your queries/accesses before you pass 
    // data to the view
    

答案 2 :(得分:-1)

您正在寻找的是一种名为“每个请求的会话/上下文”的模式。最流行和交叉的ORM,交叉WebForms / MVC这样做的方式是在一个请求的开始处新建一个上下文,抛出会话,最后在最后将其拉下并处理它。

来自:http://blogs.microsoft.co.il/blogs/gilf/archive/2010/05/18/how-to-manage-objectcontext-per-request-in-asp-net.aspx

public static class ContextHelper<T> where T : ObjectContext, new()
{
  #region Consts

  private const string ObjectContextKey = "ObjectContext";

  #endregion

  #region Methods

  public static T GetCurrentContext()
  {
    HttpContext httpContext = HttpContext.Current;
    if (httpContext != null)
    {
      string contextTypeKey = ObjectContextKey + typeof(T).Name;
      if (httpContext.Items[contextTypeKey] == null)
      {
        httpContext.Items.Add(contextTypeKey, new T());
      }
      return httpContext.Items[contextTypeKey] as T;
    }
    throw new ApplicationException("There is no Http Context available");
  }

  #endregion
}

您还可以在控制器构造函数中使用new()处理DataContext,如下所示: http://www.stephenwalther.com/blog/archive/2008/08/20/asp-net-mvc-tip-34-dispose-of-your-datacontext-or-don-t.aspx

现在这篇文章说你不必担心处理你的上下文,但我不同意。使用现代ORM,您真的希望利用“会话”,就像他们跟踪和持续更改的方式一样。如果不手动处理您的上下文,各种不良代码或可怕的工作模式单元都不会像他们应该那样抛出异常。恕我直言,ORM的会话方面是最重要的部分。忽视你的危险。

如果您使用SQL Server连接池功能否定了打开和关闭连接的许多性能影响。除非你一秒钟开始做100,000次请求,否则我不会担心。