【发布时间】:2018-02-01 09:39:58
【问题描述】:
在我的 ASP 网站中有时会抛出 2 或 3 个错误。这通常发生在我很快从一个页面转到另一个页面时。通常,当我给它时间时,它不会
它们都与数据库连接有关,我试图弄清楚在什么点或什么触发了这种行为,特别是当我无法得到确切的点/原因/场景时
所以,我的数据库上下文是这样处理的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Linq.Mapping;
using System.Web.UI;
namespace Models
{
public partial class MainDataContext
{
[Function(Name = "NEWID", IsComposable = true)]
public Guid Random()
{ // to prove not used by our C# code...
throw new NotImplementedException();
}
private static MainDataContext _DataContext;
public static MainDataContext CurrentContext
{
get
{
Page page = HttpContext.Current.Handler as Page;
if (page != null)
{
_DataContext = ((FrontEndPage)page).DataContext;
}
if (_DataContext == null)
_DataContext = new MainDataContext();
return _DataContext;
}
}
}
}
这将用于FrontEndPage,其中将有db 成员用于与数据库通信,
using System;
using System.Web.UI;
using Models;
using Managers;
public class FrontEndPage : System.Web.UI.Page
{
protected MainDataContext db = new MainDataContext();
public OrderManager OrderManager = new OrderManager();
public void Page_PreInit(object sender, EventArgs e)
{
}
public MainDataContext DataContext
{
get
{
return db;
}
}
public MasterPage MyMaster { get; set; }
public Meta Meta { get; set; }
public String CurrentPage { get; set; }
}
从这个我为我需要的任何页面派生任何类,例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Models;
public partial class Page_Default : FrontEndPage
{
protected Models.Content contactContent;
protected ShopItem shopItem;
protected void Page_Load(object sender, EventArgs e)
{
contactContent = db.Contents.FirstOrDefault(a => a.FixedRef == "contact");
}
protected void btnTest_Click(object sender, EventArgs e)
{
OrderManager.addItemToBasket(shopItem, "");
db.SubmitChanges();
Response.Redirect("/basket");
}
}
出现的一些错误是:
The operation cannot be performed during a call to SubmitChanges
There is already an open DataReader associated with this Command which must be closed first.
ExecuteReader requires an open and available Connection. The connection's current state is open.
所有这些都发生在我浏览页面时。我按 F5,通常它们会消失,页面会显示出来,但随后它们会随机返回,通常是当我快速从一个页面切换到另一个页面时。我猜这与MainDataContext 或FrontEndPage 类有关,所以我只添加了这两个类的所有代码。
如果需要,我将为Page_Default 添加更多内容,但我想知道创建和保存数据库连接的方式是否是目前的问题。
【问题讨论】:
-
这是您的第一个问题:从不,永远不要将单例实例用于数据库上下文。您应该重新编写使用
public static MainDataContext CurrentContext的每一段代码并完全删除CurrentContext和_DataContext -
哇。我刚刚看到它是一个静态成员。我以为不是所有的时间。谢谢。这可能是一个主要原因
标签: c# asp.net linq datacontext