我正在使用 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
Resource
Role
Category
ParentId
这不同于简单的唯一约束,它允许重复的Resource
,Role
和仅ParentId
变化Category
。
我查看了计算列,我认为如果持久化可以用于跨和生成唯一索引Resource+Role
,但我无法创建这种场景,因为 EF 抱怨无法跨计算列创建索引。Category
ParentId
例如,尝试使用以下数据插入两行会根据现有索引产生约束违规:
INSERT INTO [ChildModel]
([Resource] ,[Role] ,[Category], [ParentId])
VALUES
('Foo', 'Bar', 'Baz', 1),
('Foo', 'Bar', 'Baz', 1);
这满足了原始数据完整性需求,但是现在以下数据也必须引发约束违规:
INSERT INTO [ChildModel]
([Resource] ,[Role] ,[Category], [ParentId])
VALUES
('Foo', 'Bar', 'Baz', 1),
('Foo', 'Bar', 'Bof', 1);
如何在不修改模型和引入属性的情况下仅在数据库级别实现这一点?