EntityFramework外部キー含めた複合インデックスの張り方

メモ程度に残しておきます。

以下のようなvirtualを使って外部キーとして定義されているCustomerモデルを持つRecordモデルがある。

```C#
/// <summary>
    /// 記録
    /// </summary>
    [Description("記録")]
    [Table("Records")]
    public class Record
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public Record()
        {
        }

        // <summary>
        /// ID
        /// </summary>
        [Description("ID")]
        public long Id { get; set; }

        /// <summary>
        /// 記録日時
        /// </summary>
        [Description("記録日時")]
        public DateTime RecordAt { get; set; }

        /// <summary>
        /// 顧客
        /// </summary>
        [Required]
        public virtual Customer Customer { get; set; }
    }

    /// <summary>
    /// 顧客
    /// </summary>
    [Description("顧客")]
    [Table("Customers")]
    public class Customer
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public Customer()
        {
        }

        // <summary>
        /// ID
        /// </summary>
        [Description("ID")]
        public long Id { get; set; }

        /// <summary>
        /// 名前（姓）
        /// </summary>
        [Description("名前（姓）")]
        [Required]
        [StringLength(20)]
        public string LastName { get; set; }

        /// <summary>
        /// 名前（名）
        /// </summary>
        [Description("名前（名）")]
        [Required]
        [StringLength(20)]
        public string FirstName { get; set; }
    }
```

このモデルにRecordAtとCustomer.Idの２つで複合indexを張りたいパターン。

```C#
/// <summary>
    /// 記録
    /// </summary>
    [Description("記録")]
    [Table("Records")]
    public class Record
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public Record()
        {
        }

        // <summary>
        /// ID
        /// </summary>
        [Description("ID")]
        public long Id { get; set; }

        /// <summary>
        /// 記録日時
        /// </summary>
        [Description("記録日時")]
        [Index("IX_Customer_Id_RecordAt", 2)]
        public DateTime RecordAt { get; set; }

        /// <summary>
        /// CustomerプロパティのIdの値が入る
        /// </summary>
        [ForeignKey("Customer")]
        [Index("IX_Customer_Id_RecordAt", 1)]
        public long Customer_Id { get; set; }

        /// <summary>
        /// 顧客
        /// </summary>
        [Required]
        public virtual Customer Customer { get; set; }
    }

    /// <summary>
    /// 顧客
    /// </summary>
    [Description("顧客")]
    [Table("Customers")]
    public partial class Customer
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public Customer()
        {
        }

        // <summary>
        /// ID
        /// </summary>
        [Description("ID")]
        public long Id { get; set; }

        /// <summary>
        /// 名前（姓）
        /// </summary>
        [Description("名前（姓）")]
        [Required]
        [StringLength(20)]
        public string LastName { get; set; }

        /// <summary>
        /// 名前（名）
        /// </summary>
        [Description("名前（名）")]
        [Required]
        [StringLength(20)]
        public string FirstName { get; set; }
    }

```

 ForeignKey属性を付けると「外部キー制約のモデル名_プロパティ名」でCustomer.Idの値がセットされるプロパティを定義できる。
Index属性は(キー名, Order)で複合インデックスを張ることができる。