这是一个相当不错的观点,我希望答案是“这不是一个热门的主意” - 这就是说,它有一点我不感兴趣,如果有人愿意放纵。我可以重写Dispose来创建一个总是调用SaveChanges的实体类吗?
型号代码:
public partial class MyEntities : ObjectContext
{
// the idea is if the object is in a using block, this always gets called?
protected override void Dispose(bool disposing)
{
this.SaveChanges();
base.Dispose(disposing);
}
}
客户端代码:
using(var model = new MyEntities())
{
// do something
// no worry about calling model.SaveChanges()
}
我不确定的问题是:
处置是正确的地方要做到这一点,因为我由于某种原因正在思考“Finalize” - 我总是对C#的破坏感到困惑。
在客户端代码中抛出异常的情况下,通常会跳过SaveChanges,这很好,但如果这种方式符合我的想法,它总是会调用它。我应该尝试用空接球吗?
public partial class MyEntities : ObjectContext { protected override void Dispose(bool disposing) { try { this.SaveChanges(); } catch {} base.Dispose(disposing); } }
-1处理是为了清理资源。调用SaveChanges非常糟糕。 –
它是调用绑定到包含堆栈框架的范围或绑定到垃圾回收器?这就是我认为我现在真的很想知道你让我更加思考。 –
你不能让任何人看到这个代码。但是,neckerhot是即使在代码抛出异常时也会调用SaveChanges()。这是一个糟糕的dbase的好方法。 –