Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Update mit Dapper und Repository pattern
tristar
myCSharp.de - Member



Dabei seit:
Beiträge: 95

Themenstarter:

Update mit Dapper und Repository pattern

beantworten | zitieren | melden

Hallo,

um ein neues Projekt ordentlich zu gestalten arbeite ich mich nun in DApper und Repository pattern ein.
Das Abrufen der Daten von der DB hat auch schon prima geklappt.
Nun hänge ich beim Update.


public interface IArtikelRepository
    {
        IEnumerable<Artikel> GetAllArtikel();
        Artikel GetById(int ArtikelIdent);
        void Insert(Artikel artikel);
        void UpdateArtikel(Artikel artikel);
        void Delete(int ArtikelIdent);
        void Save();
    }


public void UpdateArtikel(Artikel artikel)
        {
            using (IDbConnection db = new MySqlConnection(AppConnection.ConnectionString))
            {
                string q = @"UPDATE tblartikel SET Name = @Name WHERE Id = @Id";

                if (db.State == ConnectionState.Closed)
                    db.Open();
                db.ExecuteScalar<Artikel>(q, artikel);
             
            }
            throw new NotImplementedException();
        }


Und der Aufruf:


private void btnSpeichern_Click(object sender, EventArgs e)
        {
            artikelRepository.UpdateArtikel(a);
        }

Das Update wird zwar ausgeführt - also die Daten geändert - aber ich erhalte folgende Fehlermeldung:
Fehler
System.NotImplementedException: "Die Methode oder der Vorgang ist nicht implementiert."

Was ist bzw. mache ich falsch?
private Nachricht | Beiträge des Benutzers
fichz
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: Linz

beantworten | zitieren | melden

Hallo,

siehe Zeile 12 im Codeblock #2.

LG
private Nachricht | Beiträge des Benutzers
tristar
myCSharp.de - Member



Dabei seit:
Beiträge: 95

Themenstarter:

beantworten | zitieren | melden

Oh, total übersehen, dass das ja immer ausgeführt wird! DANKE!
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.306

beantworten | zitieren | melden

Du machst die gleichen Fehler wie in Deinem anderen Thema, was die Verbindungsverwaltung und Implementierung angeht.
Schau Dir nochmal an, wie der Repository Pattern funktioniert, bevor Du da alles implementierst.

Auch das Interface sollte eigentlich anders aussehen, eher so


public interface IArtikelRepository
{
        Task<IQueryable<Artikel>> GetAll();
        Task<Artikel?> Get(int id);
        Task<Artikel> Add(ArtikelEntity entity);
        Task<Artikel> Update(ArtikelEntity entity);
        Task<Artikel?> Delete(int id);
}
Warum? I.d.R verwendet man Vererbungsmechanismen.


public interface IBaseRepository<T> where T: BaseEntity
{
        Task<IQueryable<T>> GetAll();
        Task<T?> Get(int id);
        Task<T> Add(T entity);
        Task<T> Update(T entity);
        Task<T?> Delete(int id);
}
public interface IArtikelRepository : IBaseRepository<ArtikelEntity> { }

Der Sinn vom Repository Pattern ist: Zentralisierung von DB Operationen -> DRY. Das wäre bei Deinem anderen Thema kein Performance, sonder nur Strukturbenefit (was viel wert ist).
Das für jede Entität neu zu schreiben, wäre redundanter Code.

Die Verbindungsverwaltung ist nicht Teil der Repositories. Das ist Aufgabe des Contexts, wobei dieser in das Repository übergeben wird.
Das ist bezogen auf Dein anderes Thema auch der konkrete Benefit, der sich auch aktiv auf die Performance auswirkt: der Kontext existiert nur ein mal und wird geshared.
Was Du machst ist für jede DB Operation eine neue SQL Verbindung und einen neuen Kontext aufzubauen -> wirst exakt das gleiche Performance Problem erneut bekommen.
Das richtig zu machen wäre daher schon förderlich.

Also bevor Du da weiter implementierst: schau nochmal das Prinzip, das Ziel, die Idee des Patterns an.
private Nachricht | Beiträge des Benutzers