为什么我的值不是用LINQ存储在数据库中的?

时间:2010-01-11 11:22:09

标签: linq-to-sql

我正在使用以下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,但应包含实际的日期/时间。但是......它没有更新,价值仍为空。

我的错误是什么想法?

提前致谢!

4 个答案:

答案 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()

它将起作用,或者它会抛出一个异常,抱怨当它已经附加到数据上下文时,它不能将实体附加到数据上下文,或类似的东西。