In Kürze, ich möchte zusammengesetzte Schlüssel auf meiner Tabelle mit dem Primärschlüssel zu schaffen, um SQL Server Suchleistung zu verbessern. Das Leistungsproblem tritt in der 200k-Datentabelle immer dann auf, wenn ich eine Entität ohne Primärschlüssel suche (d. H. Eine GUID-Zeichenfolge). Nehmen wir an, ich habe 3 KlassenErstellen von Composite Key Entity Framework
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 });
Was das Problem ist, dass, wenn ich ID machen wollen, UDID, ApplicationKey und PlatformKey als Composite-Key definieren mit Modelbuilder es den folgenden Fehler gibt.
NotificationMessageDevice_Device_Target_NotificationMessageDevice_Device_Source: : Die Anzahl der Eigenschaften in den abhängigen und Hauptrollen in einer Beziehung Einschränkung müssen identisch sein
Ich denke, das Problem ist, weil die Navigationseigenschaft auf NotificationMessageDevice nicht in der Lage ist zu erkennen, Was ist der Primärschlüssel in der Gerätetabelle? Wie kann ich dieses Problem lösen? Darüber hinaus werde ich mich freuen, wenn Sie Ihre Erfahrungen mit der Verbesserung der Suchleistung im Entity-Framework teilen. Normalerweise tritt das Leistungsproblem immer dann auf, wenn ich die First-Methode ohne Primärschlüssel verwende.
Ich bin nicht viel für EF Entwicklung, aber haben Sie nicht das 'ForeignKeyAttribute' auf der falschen Seite? –
Nein, das ist richtig :) – kkocabiyik