Ich probiere Dapper aus. Ich mag was ich bisher gesehen habe. Um einfache CRUD zu machen, verwende ich Dapper.rainbow. Es funktioniert sehr gut. Es funktioniert jedoch nur, wenn die Tabelle eine Identitätsspalte mit der Namens- ID hat . Es macht Sinn, db so zu haben, aber ich kann nicht nach einer Spaltennamenänderung in der Datenbank fragen, nur um Dapper zu verwenden. Um klarer zu sein, arbeite ich mit Datenbank wie Northwind Db. Es hat den Tabellennamen überall in der Id-Spalte wiederholt.
Um dies zu umgehen, habe ich den Dapper.Rainbow-Code wie folgt geändert:
public T Get(TId id,string idColumnName="Id")
{
return database.Query<T>("select * from " + TableName + " where "+idColumnName+" = @id", new { id }).FirstOrDefault();
}
Gibt es einen besseren Weg, um dies zu handhaben, wie zum Beispiel Column Mapping / Annotationen oder etwas völlig anderes?
Ich habe solche Fragen gelesen
Manuell ordnen Sie Spaltennamen mit Klasseneigenschaften zu
Dapper.Rainbow VS Dapper.Contrib
(Ich stieß auf ein ähnliches kleines Problem mit Dapper.Contrib, ich werde es separat fragen).
Update - Nicht sicher, ob die Antworten hier auf mein Dapper.Rainbow Problem anwendbar sind (Atleast, ich sehe nicht wie).
Danke für die Hilfe im Voraus!
Ich hatte ein ähnliches Problem. Die vorhandenen Dapper-Erweiterungen passten nicht zu meinem Idealbild. Ich wollte einfache CRUD-Operationen mit intelligenten Standardeinstellungen ohne etwas extra. Ich wollte auch Modelle mit zusätzlichen Eigenschaften haben, die nicht direkt der Datenbank zugeordnet wurden. Zum Beispiel - eine FullName-Eigenschaft, die FirstName und LastName in ihrem Getter kombiniert - und nicht FullName zu den Insert- und Update-Anweisungen hinzufügt.
Ich wollte, dass die Primärschlüsselspalte in den meisten Fällen Id ist, aber das Überschreiben mit einem Attribut zulassen.
Schließlich wollte ich, dass der Tabellenname standardmäßig mit dem Klassennamen übereinstimmt, aber das Überschreiben mit einem Attribut zulassen.
Ich habe meine eigene Erweiterung zu Dapper geschrieben, die diese Probleme löst. Es ist auf Github und Nuget. Hoffentlich wird es dir hilfreich sein.