メモ程度に残しておきます。
以下のようなvirtualを使って外部キーとして定義されているCustomerモデルを持つRecordモデルがある。
/// <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の2つで複合indexを張りたいパターン。
/// <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)で複合インデックスを張ることができる。