0

我一直在尝试使用 Entity Framework 的 Code First。我写了下面的代码行

DbContext _context = new  DbContext(ConfigurationManager.ConnectionStrings["con"].ConnectionString);

但是在执行时,连接保持关闭。这段代码有问题吗??

我使用如下所示的 DBContext 创建了一个通用存储库类

public class GenericRepository<T> where T:class
  {   

public DbContext _context = new DbContext(ConfigurationManager.ConnectionStrings["con"].ConnectionString);

private DbSet<T> _dbset;

public DbSet<T> Dbset
{

    set { _dbset = _context.Set<T>(); }
    get { return _dbset; }

}

public IQueryable<T> GetAll()
{

    return Dbset;
}  
}

然后我在页面加载事件上调用这个类,其中教师是一个实体类,它映射到数据库中的一个表

protected void Page_Load(object sender, EventArgs e)
{
    GenericRepository<Teacher> studentrepository = new GenericRepository<Teacher>();
    rptSchoolData.DataSource = studentrepository.GetAll().ToList();
    rptSchoolData.DataBind();
}

但连接仍然关闭,并且上下文对象的 ServerVersion 中也存在 InvalidOperation 异常。

我错过了什么吗?

4

1 回答 1

0

这个性质

public DbSet<T> Dbset
{
    set { _dbset = _context.Set<T>(); }
    get { return _dbset; }
}

有很重的气味。一个什么都不做的二传手value是一个反模式大时代。您是否希望DbSet在创建后设置GenericRepository

我不明白你的代码甚至可以工作,因为你从不初始化_dbset,它应该抛出一个空对象引用异常。

并且_dbsetDbSet开始就不应该在那里。GetAll应该返回_context.Set<T>()。EF 应该自行打开和关闭连接。也许您没有初始化 DbSet 的事实会导致连接永远无法打开,从而导致此处未显示的其他代码段出现问题。

于 2012-11-17T00:13:11.773 回答