【问题标题】:LINQ to Entities Entity InitializationLINQ to Entity 实体初始化
【发布时间】:2009-05-07 21:10:46
【问题描述】:

在 ASP.Net MVC 教程中,LINQ to Entities 代码如下所示:

public class MyController : Controller
{
    private Models db;

    public ActionResult Index()
    {
        db = new Models();
        var foo = (from f in db.foo select f).ToList();
        return View(foo);
    }
}

我猜这与线程安全/连接池有关,但我只是想知道是否有人知道不这样做的充分理由:

public class MyController : Controller
{
    private readonly Models db = new Models();

    public ActionResult Index()
    {
        var foo = (from f in db.foo select f).ToList();
        return View(foo);
    }
}

【问题讨论】:

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


    【解决方案1】:

    我只是整理了一个包含很多细节的技巧。

    您对线程的有根据的猜测只是在需要它的方法中构造/处置 Context 通常更好的众多原因之一。

    在某些情况下,这条经验法则并不适用,但非常罕见。

    看到这个:Tip 18 - How to decide on a lifetime for your ObjectContext

    【讨论】:

    • 谢谢,这就是我想要的。好文章!
    【解决方案2】:

    从我看到的代码示例中,您应该编写您要查找的代码,如下所示:

    public class MyController : Controller{
        public ActionResult Index()
        {
            using (var db = new Models())
            {
                var foo = db.Foo.ToList();
                return View(foo);
            }
        }
    }
    

    这里有两个主要变化。

    1. EF 模型是一个 IDisposable 对象,应正确处理。如果你不这样做,它不会破坏你的应用程序(GC 稍后会清理它),但如果可以的话,最好尽早清理它。
    2. 在您的 LINQ 中确实不需要 from/select 的东西,在这种情况下它什么也没做。

    尽管您应该将您的应用程序架构作为一个整体来考虑,并考虑将您的数据访问抽象到您的控制器之外。

    【讨论】:

      【解决方案3】:

      将其保留在方法中可确保仅在需要时实例化数据库,并在需要时将其添加到连接池中。我什至会采取下一步并在 using 语句中实例化它。

      public class MyController : Controller
      {
          public ActionResult Index()
          {
              using (Models db = new Models())
              {
                  var foo = (from f in db.foo select f).ToList();
                  return View(foo);
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        第一个代码 sn-p 不应该编译。您在不是构造函数的方法中分配只读字段。你确定这是一个 MVC 示例吗?

        【讨论】:

        • 酷,我只是不明白为什么有人不喜欢我,因为我发现了一个错字:) 干杯,阿里
        猜你喜欢
        • 1970-01-01
        • 2013-07-29
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多