Как задать ограничение UNIQUE в несколько столбцов в свободном API-интерфейсе Entity Framework с первым кодом
Предположим, у меня есть следующие объекты:
public class Calendar{
public int ID{get;set;}
public ICollection<Day> Days { get; set; }
}
public class Day{
public int ID{get;set;}
public DateTime Date{get;set;}
public int CalendarID{get;set;}
}
Это отношения один-ко-многим с CalendarID
в качестве внешнего ключа. Проблема в том, что я также хочу убедиться, что каждая дата существует только один раз в каждом календаре. То есть нет двух дней у обоих одинаковых Date
и то же CalendarID
, В сыром SQL я могу сделать это:
ALTER TABLE Days
ADD CONSTRAINT UN_Day UNIQUE ([Date],CalendarID);
Тем не менее, Entity Framework не будет знать, что я хочу, когда он создает таблицу автоматически. Как я могу указать это в свободном API?
1 ответ
Решение
См. Настройка индекса для одного или нескольких свойств.
В вашем классе отображения, предполагая, что он простирается от EntityTypeConfiguration<Day>
тогда вам нужно будет добавить using System.Data.Entity.Infrastructure.Annotations;
и сделайте следующее:
this.Property(x => x.Date)
.HasColumnAnnotation(IndexAnnotation.AnnotationName,
new IndexAnnotation(new IndexAttribute("UN_Day", 0) { IsUnique = true }));
this.Property(x => x.CalendarID)
.HasColumnAnnotation(IndexAnnotation.AnnotationName,
new IndexAnnotation(new IndexAttribute("UN_Day", 1) { IsUnique = true }));