Лучший подход по индексу или ограничению по вычисленному значению - PullRequest
0 голосов
/ 11 мая 2018

Я использую 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, Category и ParentId, но я не могу создать этот сценарий, так как EF жалуется, что индекс не может быть созданпо вычисляемому столбцу.

Например, попытка вставить две строки со следующими данными приводит к нарушению ограничения на основе существующего индекса:

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

Каким образом это может быть достигнуто предпочтительно только на уровне базы данных без изменения моделей и введения свойств?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...