gpt4 book ai didi

c# - 在 Entity Framework 中使用 'using' 语句的正确方法

转载 作者:行者123 更新时间:2023-12-03 11:03:15 25 4
gpt4 key购买 nike

我对使用 using 有一些疑问陈述。我了解它的作用(如果我是正确的,它会处理所有打开的连接等),但我不确定应该如何正确使用它。

我工作的项目不包含任何存储库, Entity Framework 不需要这些存储库。

基本上,我在我的方法中获取了一个 Guid 列表作为参数。这些 ID 用于餐厅,我想检索对这些餐厅的所有评论。

所以目前,我正在像这样检索列表:

public void DoSomething(List<Guid> restaurantIds)
{
List<Review> reviews;
using (var db = new Context())
{
reviews = db.Reviews.Where(x => restaurantIds.Contains(x.RestaurantId)).ToList();
}
//More stuff here
}

这是在 using 语句之外声明列表的常见不良做法吗?我想到了几个替代方案,但我(再次)不确定哪个更好。

  1. 在同一个类中创建一个单独的方法,该方法完全执行此操作并返回列表。这样在我的DoSomething方法,我可以像这样使用它:List<Review> reviews = GetReviewsFromRestaurants(restaurantIds);
  2. 我必须先创建上下文,然后在没有 using block 的情况下使用 LINQ 语句。我得打电话.Dispose()不过,当我完成它时。

我使用using时有问题吗?像我的例子中的声明?如果是这样,替代方案是否更好?如果不是这种情况,您能否举例说明我应该如何检索此列表?

最佳答案

在这种情况下,大括号定义了它们自己的范围。您将在大括号范围之外声明的变量将在大括号内可见并且没问题。

它实际上是 try catch block 的简写。

List<Review> reviews;
var db = new Context();
try
{
reviews = db.Reviews.Where(x => restaurantIds.Contains(x.RestaurantId)).ToList();
}
finally
{
db.Dispose();
}

而且您的代码段比这更简洁。编译器将始终在“已使用”对象上调用 .Dispose

关于c# - 在 Entity Framework 中使用 'using' 语句的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41481367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com