我正在使用以下LINQ语句来更新具有当前日期/时间的表条目:
MembershipClassesDataContext db = new MembershipClassesDataContext();
var tmp = db.drun_addqol_2_usrs.SingleOrDefault(y => !y.done.HasValue && y.UserId.Equals(Membership.GetUser().ProviderUserKey.ToString()));
tmp.done = DateTime.Now;
// at this point, tmp.done has the correct value!
// also the entry isn't null because I got the correct ID with tmp.UserId
// But db.GetChangeSet().Count is zero (0), so the value of "done" is changed but not commited to the ChangeSet?!
db.SubmitChanges();
“done”是一个类型为DateTime的列,在上面的查询之后,它不应该为null,但应包含实际的日期/时间。但是......它没有更新,价值仍为空。
我的错误是什么想法?
提前致谢!
答案 0 :(得分:1)
从SingleOrDefault返回的对象是已存在于DB中的对象还是新的默认对象?如果它是新的,那么你必须将它添加到数据集或.submitchanges将不会保存它。
答案 1 :(得分:0)
在调用db.SubmitChanges()之前,调用db.GetChangeSet()以确定L2S是否认为它有任何要更新的行。如果变更集为空,那么您的SingleOrDefault()方法必须不返回任何内容。
答案 2 :(得分:0)
愚蠢的问题 - 在drun_addqol_2_usrs的设计器代码中,setter的if语句是否为true(并调用属性更改的东西)?
set
{
if ((this._done != value))
{
this.OndoneChanging(value);
this.SendPropertyChanging();
this._done = value;
this.SendPropertyChanged("done");
this.OndoneChanged();
}
}
答案 3 :(得分:0)
我想知道你的datacontext是否附加了tmp?
尝试 -
db.drun_addqol_2_usrs.Attach(tmp)
然后致电
SubmitChanges()
它将起作用,或者它会抛出一个异常,抱怨当它已经附加到数据上下文时,它不能将实体附加到数据上下文,或类似的东西。