2

我正在使用 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,但是我现在需要强制执行一个新案例,以便对于相似和值的每个分组,每个.CategoryParentIdResourceRoleCategoryParentId

这不同于简单的唯一约束,它允许重复的Resource,Role和仅ParentId变化Category

我查看了计算列,我认为如果持久化可以用于跨和生成唯一索引Resource+Role,但我无法创建这种场景,因为 EF 抱怨无法跨计算列创建索引。CategoryParentId

例如,尝试使用以下数据插入两行会根据现有索引产生约束违规:

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);

如何在不修改模型和引入属性的情况下仅在数据库级别实现这一点?

4

0 回答 0