まもなく、SQL Server の検索パフォーマンスを向上させるために、主キーを残してテーブルに複合キーを作成したいと考えています。主キー (つまり、GUID の文字列) のないエンティティを検索するたびに、200k データ テーブルでパフォーマンスの問題が発生します。3つのクラスがあるとします
public class Device{
public int ID { get; set; }
public string UDID { get; set; }
public string ApplicationKey { get; set; }
public string PlatformKey { get; set; }
public ICollection<NotificationMessageDevice> DeviceMessages { get; set; }
}
public class NotificationMessageDevice {
[Column(Order = 0), Key, ForeignKey("NotificationMessage")]
public int NotificationMessage_ID { get; set; }
[Column(Order = 1), Key, ForeignKey("Device")]
public int Device_ID { get; set; }
public virtual Device Device { get; set; }
public virtual NotificationMessage NotificationMessage { get; set; }
}
public class NotificationMessage {
public int ID { get; set; }
public string Text { get; set; }
public DateTime CreateDate { get; set; }
}
modelBuilder.Entity<Device>().HasKey(t => new { t.ID, t.ApplicationKey, t.PlatformKey, t.UDID });
問題は、 ID 、 UDID 、 ApplicationKey 、および PlatformKey を modelBuilder で複合キーとして定義するたびに、次のエラーが発生することです。
NotificationMessageDevice_Device_Target_NotificationMessageDevice_Device_Source: : 関係制約の従属ロールとプリンシパル ロールのプロパティの数は同じでなければなりません
問題は、 NotificationMessageDevice のナビゲーション プロパティが Device テーブルの主キーを認識できないためだと思います。この問題を解決するにはどうすればよいですか? これに加えて、エンティティ フレームワークでの検索パフォーマンスを改善した経験を共有していただければ幸いです。通常、主キーなしで First メソッドを使用するたびに、パフォーマンスの問題が発生します。