gpt4 book ai didi

c# - Web 表单 - Entity Framework 上下文处理

转载 作者:太空狗 更新时间:2023-10-30 01:03:59 25 4
gpt4 key购买 nike

我有一个 .NET 4 Web 应用程序(Web 窗体),它使用 Entity Framework 通过 MySQL 数据库管理数据。对于每个页面,我在 Page_Load 中为该模型创建上下文。

 string connString = ConfigurationManager.ConnectionStrings["dbconnection"].ToString();
MyModel = new MyEntities(connString);

现在,在页面上的后续操作中,我可以使用 MyModel 来检索和更新数据。这对我来说很干净和简单,但我一直认为 .NET 在发出新页面请求时丢弃了前一个页面的 MyModel。我意识到情况可能并非如此?内存可能使用效率低下。

我看到一个很好的例子是合并处理处置的 using (MyEntities MyModel = new MyEntities (ConfigurationManager.ConnectionStrings["dbconnection"].ToString())),但这确实如果我在一个页面上有 6 个以上的操作,每个操作都需要在调用时重新创建上下文,这似乎不太干净(并不是说我当前的方法做得更好)。

是否有一种干净的方法可以在初始页面加载时创建上下文并在调用新页面、调用非回发或用户 session 结束时处理它?<​​/p>

最佳答案

您可以覆盖 System.Web.UI.Control 的虚拟 Dispose 方法并在那里处理您的上下文:

public override void Dispose()
{
if (MyModel != null)
MyModel.Dispose();
base.Dispose();
}

此外,您可以使 MyModel 成为具有按需创建的上下文的属性:

private MyEntities fMyModel = null;

protected MyEntities MyModel
{
get
{
if (fMyModel == null)
{
string connString = ConfigurationManager.ConnectionStrings["dbconnection"].ToString();
fMyModel = new MyEntities(connString);
}
return fMyModel;
}
}

然后,在 Dispose 中使用字段:

public override void Dispose()
{
if (fMyModel != null)
fMyModel.Dispose();
base.Dispose();
}

此外,您可以创建一个具有上述属性的 Page 基类,Dispose 覆盖并从中继承您的页面 - 然后您无需在您所有的页面。

关于c# - Web 表单 - Entity Framework 上下文处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25387266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com