实例化实体的正确方法



我有一个关于页面级别实体实例化的问题。它是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();
  }
}

相关内容

最新更新