Ich habe diese Methode:
public static IEnumerable<T> GetList(string where, Dictionary<string, object> parameters)
{
IEnumerable<T> entities;
using (var connection = OpenConnection())
{
entities = connection.GetList<T>(where, new DynamicParameters(parameters));
}
return entities;
}
Und ich nenne es so:
string publicID = "463EC1EE-8AAB-4ABA-9B39-132BC8D3236E"
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("@APIPublicID", publicID);
var apiUsers = Repository<APIUsers>.GetList("WHERE APIPublicID = @APIPublicID", parameters).ToList();
Die GetList()
-Methode ruft die SIMPLECrud-DLL auf, die ein Wrapper über Dapper ist.
Das funktioniert wunderbar. Aber hier ist das wirklich komische Ding. Wenn ich einige zusätzliche Buchstaben oder Zahlen am Ende der publicID
, funktioniert es immer noch:
Anstatt von:
string publicID = "463EC1EE-8AAB-4ABA-9B39-132BC8D3236E"
Ich mache...
string publicID = "463EC1EE-8AAB-4ABA-9B39-132BC8D3236EABCDEFG"
.... // rest of the method as before
Ich bekomme genau die gleichen Ergebnisse. Wenn ich die GUID kürzer mache oder wenn ich darin Zeichen ändere, verhält es sich wie erwartet.
Was mache ich hier falsch?
Ich denke, es hängt nicht mit dapper oder SIMPLECrud zusammen, sondern wie SQL Server Zeichenfolgen in uniqueidentifier
. Ich nehme an, dass Sie SQL Server verwenden, aber wenn nicht - wahrscheinlich verhält sich Ihre Datenbank in ähnlicher Weise.
Wenn die Zeichenfolge an uniqueidentifier
wird, ignoriert SQL Server nur überflüssige Zeichen:
select cast('463EC1EE-8AAB-4ABA-9B39-132BC8D3236EABCDEFG' as uniqueidentifier)
-- no errors, returns 463EC1EE-8AAB-4ABA-9B39-132BC8D3236E
Das bedeutet, wenn APIPublicID
Spalte APIPublicID
in Ihrem Beispiel vom Typ uniqueidentifier
, verhalten sich die folgenden Abfragen gleich:
select * from MyTable WHERE APIPublicID = '463EC1EE-8AAB-4ABA-9B39-132BC8D3236E'
select * from MyTable WHERE APIPublicID = '463EC1EE-8AAB-4ABA-9B39-132BC8D3236EABCDEFG'
uniqueidentifier
zu vergleichen, müssen sie vom selben Typ sein, also wird Ihre Zeichenkette in uniqueidentifier
und ignoriert übermäßigen Teil ( ABCDEFG
).