Как задать ограничение 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 }));
Другие вопросы по тегам