在Windows窗体应用程序中,当窗体启动时,它从数据库加载数据它首先转到Persistence Data层并创建新DBContextpublic DataEntities DBContext = new DataEntities();
之后,它将加载数据。
我在窗体关闭事件上部署了DBContext,原因是我使用了DBContext的Local属性来查询数据,所以加载后查询的是内存数据,而不是数据库,这样比较好(快),另外一个原因是只有启动程序的用户才能访问自己的数据(而不是其他用户的数据),所以任何人都很少有机会修改自己的数据(只有他的副手)。
因此,在关闭窗体之前不会释放DBContext。
注1:这是输入数据的窗体,不是主窗体,在主窗体上我会立即处理它,因为主窗体只是用来查看数据的。
注2:应用将在本地网络中使用,用户数约为40。
6.1.3我使用实体框架注3:
在开始时加载数据后,在sql profiler中,我注意到sql命令被调用:
exec sp_reset_connection
我的问题是:我可以使用这种方法并在表单关闭时(在表单关闭事件上)释放DBContext吗?
2条答案
按热度按时间suzh9iv81#
当DbContext的存留时间较长时,请注意下列事项(已连接的实体):
hgb9j2n62#
当然。这就是所谓的“连接场景”,即上下文与数据库保持“连接”(注意引号),并且保存从数据库中获取的相同实体。
在像Windows窗体应用程序这样的富客户端应用程序中,这是相对较短的编辑对话框窗口的常见模式。
上下文实际上并不保持与数据库的打开连接。它在每次数据库交互后关闭连接,因此SQL事件探查器记录。
有一点需要考虑。尽管用户同时编辑相同数据的可能性很小,但还是建议引入optimistic concurrency control。EF使这一点相对容易。