Sql server SQL Server:多列键字典顺序

Sql server SQL Server:多列键字典顺序,sql-server,.net-core,entity-framework-core,primary-key,lexicographic-ordering,Sql Server,.net Core,Entity Framework Core,Primary Key,Lexicographic Ordering,我在数据库中有两列被设置为主键,比如说Code1和Code2。我使用实体框架fluent api创建密钥,如下所示: entity.HasKey(p => new { p.Code1, p.Code2 }).HasName("table_pkey"); 我需要的是钥匙按字典顺序排列。例如,当我在数据库中有一条记录时 var code1 = "AA01"; var code2 = "AB01"; var pkey = "

我在数据库中有两列被设置为主键,比如说
Code1
Code2
。我使用实体框架fluent api创建密钥,如下所示:

entity.HasKey(p => new { p.Code1, p.Code2 }).HasName("table_pkey");
我需要的是钥匙按字典顺序排列。例如,当我在数据库中有一条记录时

var code1 = "AA01";
var code2 = "AB01";
var pkey = "AA01AB01";
我想补充一点

var code1 = "AB01";
var code2 = "AA01";
var pkey = "AB01AA01";
我希望这被视为一个重复的数据库密钥,所以它将不允许添加它们


感谢您的帮助

'AA01AB01'
'AB01AA01'
彼此不相等,因此您不能在此处强制违反主键。似乎你在这里真正需要的是两个约束条件;第一个用于确保
Code1
的值小于
Code2
,然后是主键约束。在T-SQl中,定义如下:

CREATE TABLE dbo.YourTable(Code1 char(4)不为空,
代码2字符(4)不为空,
pkey作为代码1+代码2保存);
去
ALTER TABLE dbo.YourTable添加约束检查代码顺序检查(代码1<代码2);
去
ALTER TABLE dbo.YourTable ADD CONSTRAINT PK_YourTable主键非聚集(Pkey)--因为这并不总是在上升
去
插入dbo.YourTable(代码1,代码2)
值('AA01','AB01');
去
插入dbo.YourTable(代码1,代码2)
值('AB01','AA01')--失败,因为代码1大于代码2
去
在应用程序中,您可能希望检查
Code1
是否也小于
Code2
,如果不小于,则“交换”值