Ich möchte bestimmte ORMLite-Methoden basierend auf der Implementierung des Objekts erweitern. ZBBenutzerdefinierte Ormlite-Abfrage-Implementierung basierend auf Klassenschnittstelle
Ich habe eine Schnittstelle:
public interface IHaveTimestamps
{
DateTime CreatedOn { get; set; }
DateTime UpdatedOn { get; set; }
}
Nun möchte Ich mag nur die Db.Insert<T>()
Methode außer Kraft zu setzen, wenn T
IHaveTimestamps
implementiert und für andere Fälle von T, sollte es die Insert
basierend auf dem Standardverhalten durchführen .
Dies ist so, dass ich die Einstellung CreatedOn und UpdatedOn Werte zentralisieren kann, anstatt das manuell überall zu tun.
Kann ich dies tun, indem Sie die Insert/Update-Methode überladen, so dass ich nur die Modelle aktualisieren muss, um von der Schnittstelle zu erben, und alle DB-Operationen werden sich selbst kümmern, oder würde ich etwas tun müssen wie folgt aus:
public static class DbExtensions
{
public static long MyInsert<T> (this IDbConnection dbConn, T obj, bool selectIdentity = false) where T : IHaveTimestamps {
obj.CreatedOn = DateTime.UtcNow;
obj.UpdatedOn = DateTime.UtcNow;
return dbConn.Insert<T>(obj);
}
public static long MyUpdate<T> (this IDbConnection dbConn, T obj) where T : IHaveTimestamps {
obj.UpdatedOn = DateTime.UtcNow;
return dbConn.Update<T>(obj);
}
}
Dies ist sooooooooooo smart! – labilbe
sehr cool, danke! – vonec
@mythz ist es möglich, das Request-Objekt in diese Filter zu injizieren, so dass ich Abfragen implementieren kann, die automatisch von der Benutzer-/Mandanten-ID – vonec