Ich habe eine Benutzer-Tabelle:Finden Sie einen Datensatz in dbSet mit Suche ohne Primärschlüssel
Users:
+ID
+Username
+...
Ich möchte myDBContext.Users.Find(Username)
verwenden, um einen Benutzer fin. In meinem aktuellen Kontext kann ich seine ID nicht verwenden.
Muss ich eine vollständige LINQ-Abfrage verwenden? z.B.
var user = from users in myDBContext.Users.Find(Username)
where users.Username == username
select users
Ich habe auch die Benutzername als Primärschlüssel in meiner edmx zu definieren versucht, aber dass in den folgenden Fehlern in Folge:
Properties referred by the Principal Role User must be exactly identical to the key of the EntityType CamelotShiftManagementModel.User referred to by the Principal Role in the relationship constraint for Relationship CamelotShiftManagementModel.AssociationUserFK1. Make sure all the key properties are specified in the Principal Role. C:\Code\CamelotShiftManagement\CamelotShiftManagement\Models\CamelotDB.edmx 278 11 CamelotShiftManagement
noch besser! .. Vielen Dank. – Mortalus
Wäre es nicht besser, stattdessen 'FirstOrDefault' zu verwenden? Mein Verständnis der 'SingleOrDefault' Methode ist, dass es die * ganze * Tabelle durchsuchen wird, um sicherzustellen, dass nur ein Datensatz der Bedingung entspricht. Es kann nicht sein, was das OP will. – Crono
@Crono Ja, Sie haben Recht für FirstOrDefault, wenn wir die Leistung im Vergleich zu SingleOrDefault betrachten. Aber hier denke ich, abhängig vom erwarteten Ergebnis sollten wir eine Auswahl zwischen diesen beiden Methoden treffen. Wenn Sie nur ein einzelnes Ergebnis wünschen und eine Ausnahme erwarten, wenn mehrere Sequenzen vorhanden sind, verwenden Sie SinleOrDefault, andernfalls FirstOrDefault. Ich werde meine Antwort mit diesem Kontext aktualisieren. –