3

我有这个序列生成查询,它获取当前序列并将其增加到下一个值。但是增量没有更新。nextval 始终返回 1,即数据库中的默认值

Entity  | StartVal | Increment | CurVal | NextVal
----------------------------------------------------
INVOICE |   0      |     1     |   0    |   1

nextval 应该是 3, 5, 7 等等

int nextVal = 0;
using (var db = new MedicStoreDataContext())
{
    DAL.LINQ.Sequence seq = (from sq in db.Sequences
                where sq.Entity == entity
                select sq).SingleOrDefault();

    if (seq != null)
    {
        nextVal = seq.NextVal.HasValue ? seq.NextVal.Value : 0;


        seq.NextVal = nextVal + 2;

        db.SubmitChanges();
    }

}

我留下了一些未完成的事情吗?

更新: 回答:我需要设置主键并更新序列类字段以包含主键

4

2 回答 2

4

通常这是因为它没有找到表的唯一标识符(或主键)。

在您的数据描述中,您确定该表正确选择了唯一项目吗?- 当我第一次尝试这个时,虽然我有一个唯一的键等,但 c# 中的表描述并没有将它标记为唯一,所以 linq 没有像我预期的那样悄悄地更新它,没有错误也没有警告。一旦我在 c# 中更正了数据表,一切顺利。

于 2012-07-04T13:59:42.073 回答
1

这不是正确的行为吗?如果 CurVal 为 0,您不会期望 nextVal 为 1 吗?我可能在这里遗漏了一些东西,但看起来你有点过于复杂了。基本上不是你想做的吗

using (var db = new MedicStoreDataContext())
{
    DAL.LINQ.Sequence seq = (from sq in db.Sequences
                where sq.Entity == entity
                select sq).SingleOrDefault();

    if (seq != null)
    {
        seq.CurVal += seq.Increment;

        db.SubmitChanges();
    }
}

我不明白你为什么需要整个 nextVal 位。如果我错了,请随时纠正我。

于 2012-07-04T14:10:01.043 回答