我有一个关于页面级别实体实例化的问题。它是asp.net webform的后台代码。一种方法如下:
private Entities _context;
public Entities context
{
get
{
return _context;
}
}
protected override void OnPreInit(EventArgs e)
{
_context = new Entities();
base.OnPreInit(e);
}
如果我需要更新上下文,我只需将var context = new Entities();
添加到每个方法;
或者我正在考虑这样的声明:private Entities _context;
然后在每个方法中我只是更新它并直接执行context.SaveChanges()
我糊涂了,哪个是正确的方法
我更喜欢每次实例化一个新的上下文,用using
块包围它。
如果我需要在一个事务中多次调用一个方法,我将创建一个以上下文作为参数的重载。
private void SaveData(Entities context, object data)
{
context.Data.Add(...);
}
public void SaveData(object data)
{
using(var context = new Entities())
{
SaveData(context, data);
context.SaveChanges();
}
}
public void SaveMultipleData(IEnumerable<object> data)
{
using(var context = new Entities())
{
foreach(var d in data)
{
SaveData(context, data);
}
context.SaveChanges();
}
}