【发布时间】:2013-01-11 23:02:57
【问题描述】:
我正在编写一个涉及存储配置文件的应用程序。我正在使用 Linq 访问数据库,但在保存配置文件时遇到了一个奇怪的问题。当我保存它时,它会正确写入数据库 - 但是当我离开页面并返回时,旧值仍保留在配置文件形式中。
我的个人资料页面:
if(!Page.IsPostBack) {
Profile p = Student.GetProfile(Int32.Parse(Session["userID"].ToString()));
if (p != null)
{
FirstNameTextBox.Text = p.FirstName;
LastNameTextBox.Text = p.LastName;
Address1TextBox.Text = p.Address1;
.....
}
还有我的学生班:
public static Profile GetProfile(int uID)
{
var profile = (from p in db.Profiles
where p.uID == uID
select p).FirstOrDefault();
return profile;
}
我没有在任何地方做任何花哨的缓存,所以不确定旧值的存储位置...
** 编辑 **
所以,它似乎归结为全局 LinqDataContext。在我的学生课上,我有:
public class Student
{
private static LinqClassesDataContext db = new LinqClassesDataContext() { CommandTimeout = 36000 };
public static Profile GetProfile(int uID)
{
var profile = (from p in db.Profiles
where p.uID == uID
select p).FirstOrDefault();
return profile;
}
如果我给 GetProfile 方法它自己的 DataContext,问题就解决了。
对于 Linq 来说还是个新手,让一个具有许多方法的类使用相同的数据库访问权限的最佳方法是什么?有这样的全球背景吗?还是每个方法都使用自己的数据上下文?
【问题讨论】:
-
为了清楚起见,您是说查询时新值出现在您的数据库中,但是一旦您离开,然后返回,旧值又回到数据库中?
-
正确的值会在数据库中更新 - 并留在那里。但是当我离开页面并返回时,就好像它不再查询数据库一样。