2012-07-04 93 views
3

我有这个序列生成查询,获取当前序列并将其增加到下一个值。但增量没有更新。该NEXTVAL总是从数据库更新记录不能在LINQ to SQL

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(); 
    } 

} 

,我就留什么撤消返回1,默认值?

UPDATE: 答案:我需要设置主键和更新序列类字段以包括主键

+0

我正在使用Sql CE,我不想经历麻烦 - 就像它不支持多个语句。 – codingbiz

+1

您需要向表中添加一个主键才能工作,并且还要更新linq 2 sql类。 – Candide

+0

你确定'seq'不是null。一步一步的代码,你会知道LINQ查询可能不正确? – Turbot

回答

3

这通常是因为它未发现独特识别符(或主键)为表。

在您的数据描述中,您确定表格正确拾取了独特的项目吗? - 当我第一次尝试这个,虽然我有一个独特的关键等,在c#中的表格描述没有标记为独特的,所以linq安静地没有更新它,因为我预期,没有错误没有警告。一旦我在c#中更正了数据表,这一切都进展顺利。

+0

谢谢。我实际上没有在实体列上设置我的PK。我刚刚做到了。我还需要更新LINQ生成的类以反映PK更改并且它的工作 – codingbiz

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位。如果我错了,请随时纠正我。

+0

另外要注意的是,您不增加CurVal,也不更新/插入类(我假设样本被故意减少) – Manatherin

+0

再次,不知道如果你的nextval是一个计算列的curval + 1.如果这是你的问题只是你没有更新CurVal – Manatherin

+0

我没有在实体列上设置我的PK。我刚刚做到了。我也需要更新课程,看看它是怎么回事 – codingbiz