【问题标题】:What actually happens when Model goes out of using scope?当 Model 超出使用范围时,实际会发生什么?
【发布时间】:2015-10-05 06:50:49
【问题描述】:

我正在使用块来实现 db 模型,以免混淆 disposing 和任何相关的非托管资源要求,但我想知道(基本上)当db 模型不再使用块范围。问题不在于 disposingmemory(我知道,它会自动为我们完成)。关于SQL 连接 及相关实例的问题。

所以,这是一个简单的 (ActionResult) 示例:

Account account;
using(AccountsModel accountModel = new AccountsModel())
{
    account = accountsModel.Accounts.FirstOrDefault(x=> x.Username == username);
    if(account == null) return;

    account.Name = name;
    accountsModel.SaveChanges();
}

ViewBag.Name = account.Name; // Is it safe?
return View();

问题是:“在模型的使用范围之外访问Account 类实例(由AccountsModel 提供)是否安全?”

注意:我知道,我不能/不能对超出范围的表执行任何更新。

【问题讨论】:

  • Dispose 方法被调用。里面发生了什么
  • @M.kazemAkhgary "问题不是关于处理或内存,而是关于 SQL 连接和相关实例"
  • 如果你重写 Dispose 方法并且什么都不放,那么什么也不会发生。 using 将调用 Dispose。就这样。你可以在 Dispose 中做数学。玩个游戏。任何东西!
  • 我没有覆盖/重载 Dispose 方法,这就是我要问的原因。

标签: c# asp.net sql-server scope


【解决方案1】:

只要AccountsModeldispose调用没有做任何破坏它,那么继续访问模型创建的对象应该没有问题。

所以,这真的更多取决于dispose的实现

【讨论】:

  • 我没有覆盖/重载 Dispose 方法,所以它安全吗?
  • 如果你不这样做,我想所有的工作都是清理所有连接。在内存中创建的任何东西都应该没问题。这是一个实体框架模型吗?
  • 是的,AccountsModelADO.Net Entity Model
猜你喜欢
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多