实体框架代码第一个用于密钥和属性的唯一索引

时间:2015-10-01 09:49:52

标签: c# entity-framework

我有两个表,ConfigurationDeviceDevice有一个名为Name的字符串属性。配置可以有许多设备。我想要Name属性的索引,并且名称在配置中必须是唯一的。所以我希望在Device表中的多个列上有一个索引,即Configuration_IDName

class Configuration
{
    Guid ID { get; set; } 
    List<Device> Devices { get; set;
}

class Device
{
    Guid ID { get; set; }
    string Name { get; set;
}

class ConfigurationMap : EntityTypeConfiguration<Configuration>
{
    ConfigurationMap()
    {
        this.HasKey(t => t.ID);
        this.Property(t => t.ID).HasColumnName("ID");
        this.Property(t => t.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        this.HasMany(t => t.Devices).WithRequired().WillCascadeOnDelete(true);
    }
}

class DeviceMap
{
    DeviceMap()
    {
        this.HasKey(t => t.ID);
        this.Property(t => t.ID).HasColumnName("ID");
        this.Property(t => t.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        this.Property(t => t.DisplayName)
       .HasColumnName("Name")
       .HasColumnAnnotation(IndexAnnotation.AnnotationName, new            IndexAnnotation(new IndexAttribute("NameIndex")))
       .HasMaxLength(450);
       // Where to put the other index?
    }
}

我的两个问题是:

  • 这是一个好主意吗? ;)
  • 我怎样才能使用流畅的API?

1 个答案:

答案 0 :(得分:0)

ConfigurationId属性添加到Device类(外键)。然后,在配置中,ConfigurationIdName属性都执行:

Property(t => t.Name).HasColumnAnnotation(IndexAnnotation.AnnotationName, new IndexAnnotation(new IndexAttribute("IDX_ConfigurationId_Name", 0) { IsUnique = true }));
Property(t => t.ConfigurationId).HasColumnAnnotation(IndexAnnotation.AnnotationName, new IndexAnnotation(new IndexAttribute("IDX_ConfigurationId_Name", 1) { IsUnique = true }));