gpt4 book ai didi

c# - 关闭数据库连接后使用匿名类型

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:12 24 4
gpt4 key购买 nike

我有类似下面的代码。

using (MyEntities context = new MyEntities())
{
var activities = from act in context.Activities
where act.ActTwittered == false
select new { act.ActID, act.ActTitle, act.Category, act.ActDateTime, act.Location };

foreach (var activity in activities)
{
/* ... */
}
}

这似乎工作正常,但我的循环有很多处理。我担心在此处理过程中我会让数据库连接或其他资源保持打开状态。

我尝试在 using 语句之前声明 var activities 这样我就可以在 using 语句之后处理数据,但是这个变量必须被初始化声明的地方。

了解 EF 内部工作原理的人能否告诉我在 EF 上下文“事件”时进行冗长处理是否存在问题,以及我如何缓解这些问题。

虽然我在做这件事,但也许您还可以对我在循环中使用 act.Category.CatName 这一事实发表评论。这是来自相关表的值。我是否最好在我的 EF 查询中使用联接以便一次性获取所有数据而不是强制另一个(?)数据库访问以获取相关数据?

最佳答案

您可以让编译器通过调用泛型方法来推断结果类型:

    public static T CallFunc<T>( Func<T> theFunc )
{
return theFunc();
}

...

var activities = CallFunc( () =>
{
using( var context = new MyEntities() )
{
return
(
from act in context.Activities
where act.ActTwittered == false
select new { act.ActID, act.ActTitle, act.Category, act.ActDateTime, act.Location };
)
.ToList();
}
} );

foreach( var a in activities ) ...

不要忘记末尾的 .ToList(),否则在您枚举它之前您的查询不会真正执行,这将在上下文关闭后发生。

关于c# - 关闭数据库连接后使用匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850025/

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