如何在 code-first Entity Framework fluent API 中指定多列 UNIQUE 约束
How to specify a multi-column UNIQUE constraint in code-first Entity Framework fluent API
假设我有以下实体:
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 在自动创建 table 时并不知道我想要这个。如何在流利的 API?
中指定它
参见Configuring an Index on one or more properties。
在您的映射 class 中,假设它从 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 }));
假设我有以下实体:
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 在自动创建 table 时并不知道我想要这个。如何在流利的 API?
中指定它参见Configuring an Index on one or more properties。
在您的映射 class 中,假设它从 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 }));