Ich verwende Dapper, um Werte in ein Objekt zu lesen, das ich erstellt habe, wo ich eine grundlegende gespeicherte Prozedur habe.
IF EXISTS(SELECT LOWER(UT.UserID) FROM UserTable UT WHERE UT.UserID = @UserId)
BEGIN
SELECT
UT.UserID,
UT.Name,
UT.Surname,
UT.TrackingString
FROM UserTable UT
WHERE UT.UserID = @UserId
END
und das ist der Code in meinem View-Modell.
IDbConnection connection;
using (connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Liberty"].ToString()))
{
var result = connection.QueryMultiple("GetUserData", new { UserId = userId.ToLower() }, commandType: CommandType.StoredProcedure);
user = result.Read<UserData>().First();
}
Wie kann ich das Ergebnis einchecken, wenn Spalten ausgewählt wurden? Wie es im Moment ist, bekomme ich eine InvalidOperation Exception, wenn es keine Benutzerdaten gibt (wenn der Benutzer nicht existiert).
Verwenden Sie die richtige Linq-Methode. Sie verwenden eine, die keine Ergebnisse behandelt, als ungültiges Ergebnis, während Ihre Abfrage möglicherweise keine Werte zurückgibt, wenn kein solcher Benutzer existiert.
Wechseln Sie zu einer Methode, die keine Elemente im return-Enumerable auslöst, dann nach null sucht und sie ordnungsgemäß behandelt.
// snip
user = result.Read<UserData>().FirstOrDefault();
}
if(user == null)
{
// no such user exists, go do something about it
Warum verwenden Sie QueryMultiple? Verwenden Sie stattdessen Abfrage <>. Dann mach einfach result.Count () vor result.first (). Oder mache FirstOrDefault ()
Könnte ich auch vorschlagen, dass Sie eine Klasse erstellen, um die Daten zu erhalten?
public class User
{
public int UserID {get; set;}
....
}
Dann benutze connection.Query ("....", neu ...)
Viel schöner für die Augen.