【发布时间】:2018-08-24 14:23:27
【问题描述】:
我有一个存储设备详细信息的表。为简单起见,这些列是:
Id (Primary Key)
Name (varchar)
StatusId (Foreign Key to Status table).
Status 表有两列:
Id (Primary Key)
State (varchar)
还有两行:
[Id | State]
1 | Active
2 | Inactive
我想允许设备表中的多个设备具有相同的名称,但在任何时候只有其中一个可以处于活动状态。
也就是说,在Devices表中应该是允许的:
[Id | Name | StatusId]
10 | Mobile001 | 1
11 | Mobile001 | 2
12 | Mobile001 | 2
20 | Tablet001 | 1
21 | Tablet002 | 2
22 | Tablet002 | 1
23 | Tablet003 | 2
但这不应该被允许:
[Id | Name | StatusId]
10 | Mobile001 | 1 <-- wrong
11 | Mobile001 | 1 <-- wrong
12 | Mobile001 | 2
20 | Tablet001 | 1
21 | Tablet002 | 1 <-- wrong
22 | Tablet002 | 1 <-- wrong
23 | Tablet003 | 2
有没有办法在 T-SQL 中创建一个约束来拒绝违反此规则的插入和更新?有没有办法在 EF 代码中首先使用 EntityTypeConfigurations 和 Fluent API,可能通过 IndexAnnotation 或 IndexAttributes 来实现?
谢谢。
【问题讨论】:
-
使用过滤的唯一索引。
标签: c# sql-server database entity-framework tsql