Création d’un entity framework clé composite

Je souhaite rapidement créer des clés composites sur ma table avec la clé primaire pour améliorer les performances de recherche du serveur SQL. Le problème de performance se produit sur un tableau de données de 200 Ko chaque fois que je recherche une entité sans clé primaire (c’est-à-dire une chaîne de GUID). Supposons que j’ai 3 classes

public class Device{ public int ID { get; set; } public ssortingng UDID { get; set; } public ssortingng ApplicationKey { get; set; } public ssortingng 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 ssortingng Text { get; set; } public DateTime CreateDate { get; set; } } modelBuilder.Entity().HasKey(t => new { t.ID, t.ApplicationKey, t.PlatformKey, t.UDID }); 

Le problème est que chaque fois que je veux créer un ID, UDID, ApplicationKey et PlatformKey, définir comme clé composite avec modelBuilder, cela donne l’erreur suivante.

NotificationMessageDevice_Device_Target_NotificationMessageDevice_Device_Source:: Le nombre de propriétés dans les rôles dépendants et principaux dans une contrainte de relation doit être identique

Je pense que le problème est dû au fait que la propriété de navigation sur NotificationMessageDevice n’est pas capable de reconnaître la clé primaire sur la table Device. Comment puis-je résoudre ce problème? En plus de cela, je serai heureux si vous partagez vos expériences en améliorant les performances de recherche sur le framework Entity. Habituellement, le problème de performances se produit chaque fois que j’utilise la méthode First sans clés primaires.

Si la table Device possède une clé primaire composite, vous avez besoin de la même clé étrangère composite sur votre table NotificationMessageDevice . Comment SQL trouverait-il Device sans clé primaire complète? Vous devez également faire en sorte que ces champs fassent partie de la clé primaire de la table NotificationMessageDevice . Sinon, vous ne pouvez pas garantir que la clé primaire sera unique:

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