当 Model 超出使用范围时,实际会发生啥?

Posted

技术标签:

【中文标题】当 Model 超出使用范围时,实际会发生啥?【英文标题】: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 方法,这就是我要问的原因。 【参考方案1】:

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

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

【讨论】:

我没有覆盖/重载 Dispose 方法,所以它安全吗? 如果你不这样做,我想所有的工作都是清理所有连接。在内存中创建的任何东西都应该没问题。这是一个实体框架模型吗? 是的,AccountsModelADO.Net Entity Model

以上是关于当 Model 超出使用范围时,实际会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

当套接字连续接收到超出程序处理能力的数据时会发生啥?

当实际数据发生变化时,结果缓存数据会发生啥变化?

当 getline() 读取的行大于系统内存时会发生啥?

当 Grails BuildConfig 范围没有指定组织时会发生啥?

索引超出范围但实际上在范围内[关闭]

UITableView 索引超出范围