自动增量id基于数据库中的另一个字段

时间:2014-07-23 16:38:59

标签: c# linq sql-server-2008-r2

我有下表:

enter image description here

我希望在添加记录时自动增加版本号,但我希望它对SoftwareId是唯一的。我将版本号设置为'是身份'。

例如:

---
1|1
2|1
2|2
3|1
3|2
3|3
4|1
5|1
5|2

因此,对于每个softwareid,有一组数字会在添加新记录时自动递增。

这是我可以通过Sql Server做的事情还是我需要通过Entity / Linq做到这一点?

我将使用Entity和Linq来访问数据。我是否需要在添加自己时增加数字?

2 个答案:

答案 0 :(得分:0)

如果您连接到数据库并且集合中包含所有数据,例如:

class Dog
{
     int ID {get; }
     string Name {get;set;}
}

现在,您已在集合中包含此数据 - 名称myDogs(类型为:List<Dog>) 现在您需要此集合中的最后一个ID,然后您可以使用:

var lastID = myDogs.Last().Select(p=>p.ID);

答案 1 :(得分:0)

您可以创建一个这样的表:

create table dbo.foo
(
  SoftwareID int not null ,
  ID         int not null identity(1,1) ,

  primary key clustered    ( SoftwareID , ID ) ,
  unique      nonclustered (              ID ) ,

)

然后我们将它包装在视图中(并通过视图访问它),如下所示:

create view dbo.foo_view
as select * ,
          VersionID  = row_number() over (
                         partition by t.SoftwareID
                         order by t.ID
                         )
   from dbo.foo t

如果我们然后用一些样本数据为表格播种:

insert dbo.foo ( SoftwareID  ) values ( 1 )
insert dbo.foo ( SoftwareID  ) values ( 2 )
insert dbo.foo ( SoftwareID  ) values ( 3 )
insert dbo.foo ( SoftwareID  ) values ( 1 )
insert dbo.foo ( SoftwareID  ) values ( 2 )
insert dbo.foo ( SoftwareID  ) values ( 3 )
insert dbo.foo ( SoftwareID  ) values ( 1 )
insert dbo.foo ( SoftwareID  ) values ( 2 )
insert dbo.foo ( SoftwareID  ) values ( 3 )
insert dbo.foo ( SoftwareID  ) values ( 2 )
insert dbo.foo ( SoftwareID  ) values ( 2 )
insert dbo.foo ( SoftwareID  ) values ( 1 )

我们可以查询视图

select *
from dbo.foo_view

并获得这些结果

SoftwareID ID VersionID
---------- -- ---------
     1      1     1
     1      4     2
     1      7     3
     1     12     4
     2      2     1
     2      5     2
     2      8     3
     2     10     4
     2     11     5
     3      3     1
     3      6     2
     3      9     3