我不完全理解为什么我们要在这里使用“using
”块。
以下代码是使用EF从数据库中显示两个表名为“genre”和“review”的代码:
代码如下:
C#
protected void Page_Load(object sender, EventArgs e)
{
using (PlanetWroxEntities myEntities = new PlanetWroxEntities())
{
var authorizedReviews = from review in myEntities.Reviews
where review.Authorized == true
orderby review.CreateDateTime descending
select review;
GridView1.DataSource = authorizedReviews.ToList();
GridView1.DataBind();
}
}
以下是作者的一些解释:
生成模型后,您可以对其执行LINQ查询以从底层数据库中获取数据。要访问数据,需要一个
DbContext
类型的实例,该类是PlanetWroxEntities
类的基类。在代码中,这个实例是在 Using 块内创建的。Using 块(C# 中的 using)用于包含必须放入内存并且使用完毕后必须清除(从内存中清除)的变量。因为 myEntities 变量保存了对 SQL Server 数据库的稀缺连接,所以最好将使用它的代码包装在 Using 块中,以便对象在块结束时被销毁而连接被释放。此 myEntities 对象暴露数据(如评论和类型),您可以使用这些数据来进行查询:
我有两个问题:
1- 为什么我们应该摆脱这个变量?是因为它占用了内存空间吗?还是因为它保存了与 SQL Server 数据库的连接,所以我们不需要对象而只需要连接?
2- "连接被释放" 是什么意思?如果连接是对象的一部分,为什么它没有被销毁?
IDisposable
接口,即使你不完全理解该对象持有何种非托管资源,你也应该使用using
语句来清理它。 - Falanwe