Entity Framework6: 具有导航功能的多列唯一索引属性
Entity Framework 6: Multicolumn unique index featuring navigation property
如何在模型上设置多列索引:
public class Meta
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
[Index("MetaPeriodDateUnq", IsUnique = true, Order = 2)]
[Required]
public DateTime Date { get; set; }
[Index("MetaPeriodDateUnq", IsUnique = true, Order = 1)]
[Required]
public virtual PeriodType Period { get; set; }
/*
...
*/
}
public class PeriodType
{
[Key]
public Guid Id { get; set; }
/*
...
*/
}
数据库初始化后只有 "MetaPeriodDateUnq" 索引提及 Meta.Date 列,但我依赖 Meta.Date + Meta.Period.Id 唯一性。
您必须明确包含外键,导航属性上的注释通常不起作用。
[Index("MetaPeriodDateUnq", IsUnique = true, Order = 2)]
public DateTime Date { get; set; }
[Index("MetaPeriodDateUnq", IsUnique = true, Order = 1)]
public Guid PeriodId { get; set; }
public virtual PeriodType Period { get; set; }
这应该有效(未测试)。
如何在模型上设置多列索引:
public class Meta
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
[Index("MetaPeriodDateUnq", IsUnique = true, Order = 2)]
[Required]
public DateTime Date { get; set; }
[Index("MetaPeriodDateUnq", IsUnique = true, Order = 1)]
[Required]
public virtual PeriodType Period { get; set; }
/*
...
*/
}
public class PeriodType
{
[Key]
public Guid Id { get; set; }
/*
...
*/
}
数据库初始化后只有 "MetaPeriodDateUnq" 索引提及 Meta.Date 列,但我依赖 Meta.Date + Meta.Period.Id 唯一性。
您必须明确包含外键,导航属性上的注释通常不起作用。
[Index("MetaPeriodDateUnq", IsUnique = true, Order = 2)]
public DateTime Date { get; set; }
[Index("MetaPeriodDateUnq", IsUnique = true, Order = 1)]
public Guid PeriodId { get; set; }
public virtual PeriodType Period { get; set; }
这应该有效(未测试)。