实例化实体的正确方法

时间:2014-08-12 15:15:37

标签: asp.net entity-framework

我对页面级实体的实例化有疑问。它的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()

我很困惑,这是正确的方式。

1 个答案:

答案 0 :(得分:0)

我更喜欢每次实例化一个新的上下文,用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();
  }
}