gpt4 book ai didi

entity-framework-4 - 处理 ObjectResult

转载 作者:行者123 更新时间:2023-12-01 03:55:38 24 4
gpt4 key购买 nike

我已经开始使用 Entity Framework (首先是数据库),我注意到 tt 模板为上下文类(对于存储过程)生成的方法具有 ObjectResult 的返回类型。

这种类型是 IDisposable,但我找不到实际调用 Dispose 方法的示例代码。是否有一个原因?

我目前在存储过程调用中没有“使用”,因为我对结果做了进一步的 IEnumerable 相关的东西(基本上只是投影结果集),但我可以轻松地重构它。

我的问题是,如果我没有理由保持与数据库的连接打开,我是否应该使用如下模式:

using (var context = new DatabaseContext()) 
{
using (var result = context.spMyStoredProcedure(param1, param2))
{
return result.ToList();
}
}

我已经看到一些建议,甚至可能不需要处理 DbContext,但即使在 MSDN 上,似乎也有很多不一致之处。

最佳答案

我反编译了ObjectResult<T> (EF4。) 这是它的 Dispose()方法。它正在创建其他托管对象,例如 DbDataReader .和一个名为 Shaper 的内部对象可以拥有一个数据库连接。

如果你处理它,你就相信它知道它在做什么。如果你不这样做,你相信自己知道它在做什么,不做什么,以及为什么。我会小心翼翼地处理它。

public override void Dispose()
{
DbDataReader reader = this._reader;
this._reader = (DbDataReader) null;
this._nextResultGenerator = (NextResultGenerator) null;
if (reader != null && this._readerOwned)
{
reader.Dispose();
if (this._onReaderDispose != null)
{
this._onReaderDispose((object) this, new EventArgs());
this._onReaderDispose = (Action<object, EventArgs>) null;
}
}
if (this._shaper == null)
return;
if (this._shaper.Context != null && this._readerOwned)
this._shaper.Context.ReleaseConnection();
this._shaper = (Shaper<T>) null;
}

关于entity-framework-4 - 处理 ObjectResult<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17548682/

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