当 Model 超出使用范围时,实际会发生啥?
Posted
技术标签:
【中文标题】当 Model 超出使用范围时,实际会发生啥?【英文标题】:What actually happens when Model goes out of using scope?当 Model 超出使用范围时,实际会发生什么? 【发布时间】:2015-10-05 06:50:49 【问题描述】:我正在使用块来实现 db 模型,以免混淆 disposing 和任何相关的非托管资源要求,但我想知道(基本上)当db 模型不再使用块范围。问题不在于 disposing 或 memory(我知道,它会自动为我们完成)。关于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】:
只要AccountsModel
的dispose
调用没有做任何破坏它,那么继续访问模型创建的对象应该没有问题。
所以,这真的更多取决于dispose
的实现
【讨论】:
我没有覆盖/重载Dispose
方法,所以它安全吗?
如果你不这样做,我想所有的工作都是清理所有连接。在内存中创建的任何东西都应该没问题。这是一个实体框架模型吗?
是的,AccountsModel
是 ADO.Net Entity Model
。以上是关于当 Model 超出使用范围时,实际会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章