我有下表:
我希望在添加记录时自动增加版本号,但我希望它对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来访问数据。我是否需要在添加自己时增加数字?
答案 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