我使用的是ef-core 2.1 rc1,我的模型类似于:
public class ChildModel
{
public int Id { get; set; }
public string Resource { get; set; }
public string Role { get; set; }
public string Category { get; set; }
public ParentModel Parent { get; set; }
}
生成的模式在关联表上包含ParentId
FK int列。
我在Resource
,Role
,Category
和ParentId
之间有一个唯一索引,但我现在需要强制执行一个新案例,以便对每个类似{ {1}}和Resource
值,每Role
只存在一个Category
。
这与简单的唯一约束不同,后者允许ParentId
,Resource
和Role
的重复集仅仅ParentId
变化。
我查看了计算列,我认为如果持久化可用于生成Category
,Resource+Role
和Category
之间的唯一索引,但我无法将此方案创建为EF抱怨无法在计算列中创建索引。
例如,尝试使用以下数据插入两行会产生基于现有索引的约束违规:
ParentId
满足原始数据完整性需求,但是现在以下数据也必须违反约束:
INSERT INTO [ChildModel]
([Resource] ,[Role] ,[Category], [ParentId])
VALUES
('Foo', 'Bar', 'Baz', 1),
('Foo', 'Bar', 'Baz', 1);
如果不在修改模型和引入属性的情况下,如何才能在数据库级别实现这一目标?