实体框架6:具有导航属性的多列唯一索引

时间:2015-01-17 10:02:35

标签: c# sql entity-framework sql-server-2008 entity-framework-6

如何在模型上设置多列索引:

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唯一性。

1 个答案:

答案 0 :(得分:8)

您必须明确包含外键,导航属性上的注释通常不起作用。

[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; }

这应该有效(未经测试)。