From 92893665fe2000a0282584400807699f5402de86 Mon Sep 17 00:00:00 2001 From: jafreli Date: Mon, 16 Jun 2025 15:01:00 +0200 Subject: [PATCH] Aufgabe OR-Mapper --- FahrzeugDatenBank/DatenbankKontext.cs | 25 ++++++++++++ FahrzeugDatenBank/FahrzeugDTO.cs | 8 +++- FahrzeugDatenBank/FahrzeugDatenBank.csproj | 3 ++ FahrzeugDatenBank/FahrzeugOrmRepository.cs | 47 ++++++++++++++++++++++ FahrzeugDatenBank/FahrzeugRepository.cs | 2 +- FahrzeugDatenBank/IFahrzeugRepository.cs | 13 ++++++ FahzeugWPF/App.xaml.cs | 4 +- FahzeugWPF/FahrzeugeModell.cs | 4 +- 8 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 FahrzeugDatenBank/DatenbankKontext.cs create mode 100644 FahrzeugDatenBank/FahrzeugOrmRepository.cs create mode 100644 FahrzeugDatenBank/IFahrzeugRepository.cs diff --git a/FahrzeugDatenBank/DatenbankKontext.cs b/FahrzeugDatenBank/DatenbankKontext.cs new file mode 100644 index 0000000..01ce5e7 --- /dev/null +++ b/FahrzeugDatenBank/DatenbankKontext.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore; + +namespace FahrzeugDatenBank; + +public class DatenbankKontext : DbContext +{ + private readonly string _connectionString; + + public DatenbankKontext(string connectionString) + { + _connectionString = connectionString; + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseMySql(_connectionString, ServerVersion.AutoDetect(_connectionString)); + } + + public DbSet Fahrzeuge { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasKey(e => e.Id); + } +} diff --git a/FahrzeugDatenBank/FahrzeugDTO.cs b/FahrzeugDatenBank/FahrzeugDTO.cs index 267f0fa..869aa7b 100644 --- a/FahrzeugDatenBank/FahrzeugDTO.cs +++ b/FahrzeugDatenBank/FahrzeugDTO.cs @@ -1,8 +1,14 @@ -namespace FahrzeugDatenBank; +using System.ComponentModel.DataAnnotations.Schema; +namespace FahrzeugDatenBank; + +[Table("fahrzeuge")] public class FahrzeugDTO { + [Column("id")] public int Id { get; set; } + [Column("fahrzeug_name")] public string? Name { get; set; } + [Column("fahrzeug_typ")] public string? Typ { get; set; } } diff --git a/FahrzeugDatenBank/FahrzeugDatenBank.csproj b/FahrzeugDatenBank/FahrzeugDatenBank.csproj index d8c8065..b3aae1a 100644 --- a/FahrzeugDatenBank/FahrzeugDatenBank.csproj +++ b/FahrzeugDatenBank/FahrzeugDatenBank.csproj @@ -7,7 +7,10 @@ + + + diff --git a/FahrzeugDatenBank/FahrzeugOrmRepository.cs b/FahrzeugDatenBank/FahrzeugOrmRepository.cs new file mode 100644 index 0000000..2535372 --- /dev/null +++ b/FahrzeugDatenBank/FahrzeugOrmRepository.cs @@ -0,0 +1,47 @@ + +namespace FahrzeugDatenBank; + +public class FahrzeugOrmRepository : IFahrzeugRepository +{ + private readonly DatenbankKontext _kontext; + + public FahrzeugOrmRepository(DatenbankKontext kontext) + { + this._kontext = kontext; + } + + public void AktualisiereFahrzeug(int id, string fahrzeugName, string fahrzeugTyp) + { + FahrzeugDTO fahrzeug = _kontext.Fahrzeuge.First(f => f.Id == id); + fahrzeug.Name = fahrzeugName; + fahrzeug.Typ = fahrzeugTyp; + _kontext.SaveChanges(); + } + + public void FuegeFahrzeugEin(string fahrzeugName, string fahrzeugTyp) + { + _kontext.Fahrzeuge.Add(new FahrzeugDTO() { Name = fahrzeugName, Typ = fahrzeugTyp }); + _kontext.SaveChanges(); + } + + public FahrzeugDTO GetFahrzeugByID(int id) + { + return _kontext.Fahrzeuge.First(f => f.Id == id); + } + + public List HoleAlleFahrzeuge() + { + return _kontext.Fahrzeuge.ToList(); + } + + public void LoescheFahrzeug(int id) + { + _kontext.Fahrzeuge.Remove(GetFahrzeugByID(id)); + _kontext.SaveChanges(); + } + + public List SucheFahrzeuge(string searchTerm) + { + return _kontext.Fahrzeuge.Where(f => f.Name.Contains(searchTerm) || f.Typ.Contains(searchTerm)).ToList(); + } +} diff --git a/FahrzeugDatenBank/FahrzeugRepository.cs b/FahrzeugDatenBank/FahrzeugRepository.cs index 893be67..1e743c9 100644 --- a/FahrzeugDatenBank/FahrzeugRepository.cs +++ b/FahrzeugDatenBank/FahrzeugRepository.cs @@ -2,7 +2,7 @@ namespace FahrzeugDatenBank; -public class FahrzeugRepository +public class FahrzeugRepository : IFahrzeugRepository { private string _connectionString; diff --git a/FahrzeugDatenBank/IFahrzeugRepository.cs b/FahrzeugDatenBank/IFahrzeugRepository.cs new file mode 100644 index 0000000..e2c341c --- /dev/null +++ b/FahrzeugDatenBank/IFahrzeugRepository.cs @@ -0,0 +1,13 @@ + +namespace FahrzeugDatenBank +{ + public interface IFahrzeugRepository + { + void AktualisiereFahrzeug(int id, string fahrzeugName, string fahrzeugTyp); + void FuegeFahrzeugEin(string fahrzeugName, string fahrzeugTyp); + FahrzeugDTO GetFahrzeugByID(int id); + List HoleAlleFahrzeuge(); + void LoescheFahrzeug(int id); + List SucheFahrzeuge(string searchTerm); + } +} \ No newline at end of file diff --git a/FahzeugWPF/App.xaml.cs b/FahzeugWPF/App.xaml.cs index 0024046..96ec43a 100644 --- a/FahzeugWPF/App.xaml.cs +++ b/FahzeugWPF/App.xaml.cs @@ -21,7 +21,9 @@ namespace FahzeugWPF ServiceCollection services = new ServiceCollection(); services.AddScoped(sp => new Konfigurationsleser(configuration)); - services.AddScoped(sp => new FahrzeugRepository(sp.GetRequiredService().LiesDBVerebindung())); + services.AddScoped(sp => new DatenbankKontext(sp.GetRequiredService().LiesDBVerebindung())); + // services.AddScoped(sp => new FahrzeugRepository(sp.GetRequiredService().LiesDBVerebindung())); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/FahzeugWPF/FahrzeugeModell.cs b/FahzeugWPF/FahrzeugeModell.cs index 1efe8e2..0d88bad 100644 --- a/FahzeugWPF/FahrzeugeModell.cs +++ b/FahzeugWPF/FahrzeugeModell.cs @@ -4,9 +4,9 @@ namespace FahzeugWPF; class FahrzeugeModell { - private readonly FahrzeugRepository _repository; + private readonly IFahrzeugRepository _repository; - public FahrzeugeModell(FahrzeugRepository repository) + public FahrzeugeModell(IFahrzeugRepository repository) { this._repository = repository; }