Ich versuche, ein generisches Repository mit Dapper zu erstellen. Ich habe jedoch einige Schwierigkeiten, die CRUD-Operationen zu implementieren.Generisches Repository mit Dapper
ist hier ein Code aus dem Repository:
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
internal IDbConnection Connection
{
get
{
return new SqlConnection(ConfigurationManager.ConnectionStrings["SoundyDB"].ConnectionString);
}
}
public GenericRepository(string tableName)
{
_tableName = tableName;
}
public void Delete(TEntity entity)
{
using (IDbConnection cn = Connection)
{
cn.Open();
cn.Execute("DELETE FROM " + _tableName + " WHERE [email protected]", new { ID = entity.Id });
}
}
}
Wie Sie sehen können, meine Lösch-Methode einen TEntity als Parameter annimmt, die ein Paramter der Typklasse ist.
Ich nenne meine Delete-Methode von meinem UserRepository wie folgt aus:
public class UserRepository : GenericRepository<User>, IUserRepository
{
private readonly IConnectionFactory _connectionFactory;
public UserRepository(IConnectionFactory connectionFactory) : base("User")
{
_connectionFactory = connectionFactory;
}
public async Task<User> Delete(User model)
{
var result = await Delete(model);
return result;
}
}
Die Sache ist, dass ich nicht entity.Id
in meiner Delete-opration in meinem generic Repository schreiben kann. Ich bekomme einen Fehler. Wie kann ich CRUD-Operationen so einfach umsetzen?
Hier ist die Fehlermeldung:
TEntity does not contain a definition of "Id" and no extension method "Id" accepting a argument of type "TEntity" could be found
Wenn Sie einen Fehler haben und eine Frage zu diesem Fehler stellen, müssen Sie diesen Fehler einfügen. Ein Fehler, der zur Laufzeit in diesem Fall auftritt, wird als 'Exception' bezeichnet (* so manifestieren sich Fehler in .net *). Fügen Sie die 'Message', den' Type', den 'StackTrace' hinzu und wiederholen Sie dies rekursiv über' InnerException'. Verwenden Sie den Bearbeitungslink zu Ihrer Frage, um dieses Detail einzubeziehen, und schließen Sie es nicht als Kommentar ein.Bitte lesen Sie auch [Wie stelle ich eine gute Frage] (http://stackoverflow.com/help/how-to-ask). – Igor
@Igor: Es ist kein Laufzeitfehler. Überprüfen Sie meine aktualisierte Frage. – Bryan
Haben alle Typen, die Sie verwenden können, eine öffentliche Eigenschaft vom Typ 'int' namens' Id'? – Igor