针对计算值的索引或约束的最佳方法

时间:2018-05-10 22:53:10

标签: c# entity-framework-core entity-framework-core-2.1

我使用的是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列。

我在ResourceRoleCategoryParentId之间有一个唯一索引,但我现在需要强制执行一个新案例,以便对每个类似{ {1}}和Resource值,每Role只存在一个Category

这与简单的唯一约束不同,后者允许ParentIdResourceRole的重复集仅仅ParentId变化。

我查看了计算列,我认为如果持久化可用于生成CategoryResource+RoleCategory之间的唯一索引,但我无法将此方案创建为EF抱怨无法在计算列中创建索引。

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

ParentId

满足原始数据完整性需求,但是现在以下数据也必须违反约束:

INSERT INTO [ChildModel]
    ([Resource] ,[Role] ,[Category], [ParentId])
VALUES
    ('Foo', 'Bar', 'Baz', 1),
    ('Foo', 'Bar', 'Baz', 1);

如果不在修改模型和引入属性的情况下,如何才能在数据库级别实现这一目标?

0 个答案:

没有答案