Я использую 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);
Каким образом это может быть достигнуто предпочтительно только на уровне базы данных без изменения моделей и введения свойств?