Создание структуры составных ключевых объектов

Вскоре я хочу создать составные клавиши на моей таблице, оставшиеся с первичным ключом, чтобы улучшить производительность поиска SQL-сервера. Проблема производительности возникает в таблице данных 200k всякий раз, когда я ищу объект без первичного ключа (т. Е. Строку GUID). Предположим, что у меня есть 3 classа

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 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().HasKey(t => new { t.ID, t.ApplicationKey, t.PlatformKey, t.UDID }); 

Проблема в том, что всякий раз, когда я хочу, чтобы ID, UDID, ApplicationKey и PlatformKey определялись как составной ключ с modelBuilder, он дает следующую ошибку.

NotificationMessageDevice_Device_Target_NotificationMessageDevice_Device_Source:: количество свойств в зависимых и основных ролях в ограничении отношений должно быть одинаковым

Я думаю, проблема заключается в том, что свойство навигации в NotificationMessageDevice не может распознать, что первичный ключ находится в таблице Device. Как я могу решить эту проблему? В дополнение к этому я буду рад, если вы поделитесь своим опытом, улучшающим производительность поиска в инфраструктуре Entity. Обычно проблема с производительностью возникает, когда я использую первый метод без первичных ключей.

    Если в таблице « Устройства» есть составной первичный ключ, вам нужен такой же составной внешний ключ в таблице NotificationMessageDevice . Как SQL найти устройство без полного первичного ключа? Также вы должны сделать эти поля частью первичного ключа таблицы NotificationMessageDevice . В противном случае вы не можете гарантировать, что первичный ключ будет уникальным:

     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; } [Column(Order = 2), Key, ForeignKey("Device")] public string Device_UDID { get; set; } [Column(Order = 3), Key, ForeignKey("Device")] public string Device_ApplicationKey { get; set; } public virtual Device Device { get; set; } public virtual NotificationMessage NotificationMessage { get; set; } } 
    Interesting Posts

    Как мы можем перенаправить вывод программной консоли Java на несколько файлов?

    Получение границ MKMapView

    Трекпадный жест для переключения на заголовок / источник

    Место хранения «исчезло» на внутреннем SSD MacBook Air

    Ошибка: выполнение выполнено для задачи ‘: app: transformClassesWithJarMergingForDebug’

    Вопрос с интервью: проверьте, является ли одна строка rotationм другой строки

    Как установить локальный пакет NuGet .nupkg?

    сценарий оболочки. как извлечь строку, используя регулярные выражения

    Помощь с настраиваемыми атрибутами View в проекте библиотеки Android

    Как я могу выразить дополнительную информацию (время, вероятность) относительно отношения в RDF?

    Инструменты, помогающие преобразовывать двоичные форматы файлов

    Инструмент, который полностью блокирует доступ в Интернет для Windows?

    Удалить пароль для ноутбука Toshiba?

    SSH Connection отказано

    Пауза для всех задач, отличных от x ЦП

    Давайте будем гением компьютера.