From e5214e44c382beedfe2200babf1a7597704e96ea Mon Sep 17 00:00:00 2001 From: Damian Wessels Date: Wed, 29 Mar 2023 17:04:39 +0200 Subject: [PATCH] =?UTF-8?q?Projekte=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...638_AuftraggeberAddedToProject.Designer.cs | 233 ++++++++++++++++++ ...230329145638_AuftraggeberAddedToProject.cs | 50 ++++ .../SewerStammGenDbContextModelSnapshot.cs | 16 ++ .../AddDBContextHostBuilderExtensions.cs | 26 +- .../AddServicesHostBuilderExtensions.cs | 5 + .../AddViewModelsHostBuilderExtensions.cs | 6 +- SewerStammGen/SewerStammGen.WPF.csproj | 4 + .../ViewModel/Projekt/ProjektListViewModel.cs | 32 ++- SewerStammGen/appsettings.json | 2 +- 9 files changed, 369 insertions(+), 5 deletions(-) create mode 100644 SewerStammGen.EntityFramework/Migrations/20230329145638_AuftraggeberAddedToProject.Designer.cs create mode 100644 SewerStammGen.EntityFramework/Migrations/20230329145638_AuftraggeberAddedToProject.cs diff --git a/SewerStammGen.EntityFramework/Migrations/20230329145638_AuftraggeberAddedToProject.Designer.cs b/SewerStammGen.EntityFramework/Migrations/20230329145638_AuftraggeberAddedToProject.Designer.cs new file mode 100644 index 0000000..2eddf78 --- /dev/null +++ b/SewerStammGen.EntityFramework/Migrations/20230329145638_AuftraggeberAddedToProject.Designer.cs @@ -0,0 +1,233 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using SewerStammGen.EntityFramework; + +#nullable disable + +namespace SewerStammGen.EntityFramework.Migrations +{ + [DbContext(typeof(SewerStammGenDbContext))] + [Migration("20230329145638_AuftraggeberAddedToProject")] + partial class AuftraggeberAddedToProject + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Shared.Domain.Auftraggeber", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Ansprechpartner") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("Ort") + .IsRequired() + .HasColumnType("text"); + + b.Property("Postleitzahl") + .IsRequired() + .HasColumnType("text"); + + b.Property("Strasse") + .IsRequired() + .HasColumnType("text"); + + b.Property("Telefonnummer") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Auftraggebers"); + }); + + modelBuilder.Entity("Shared.Domain.Kanal", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DN") + .HasColumnType("integer"); + + b.Property("EndSchachtId") + .HasColumnType("integer"); + + b.Property("Entwaesserung") + .HasColumnType("integer"); + + b.Property("Haltungslaenge") + .HasColumnType("numeric"); + + b.Property("Material") + .IsRequired() + .HasColumnType("text"); + + b.Property("Objektbezeichnung") + .IsRequired() + .HasColumnType("text"); + + b.Property("ProjektId") + .HasColumnType("integer"); + + b.Property("StartSchachtId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("EndSchachtId"); + + b.HasIndex("ProjektId"); + + b.HasIndex("StartSchachtId"); + + b.ToTable("Kanaele"); + }); + + modelBuilder.Entity("Shared.Domain.Projekt", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AuftraggeberId") + .HasColumnType("integer"); + + b.Property("Erstelldatum") + .IsRequired() + .HasColumnType("text"); + + b.Property("ExportType") + .HasColumnType("integer"); + + b.Property("Kodierungssystem") + .HasColumnType("integer"); + + b.Property("Ort") + .IsRequired() + .HasColumnType("text"); + + b.Property("Projektname") + .IsRequired() + .HasColumnType("text"); + + b.Property("Strasse") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("AuftraggeberId"); + + b.ToTable("Projekte"); + }); + + modelBuilder.Entity("Shared.Domain.Schacht", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DeckelHoehe") + .HasColumnType("decimal(18,4)"); + + b.Property("Entwaesserung") + .HasColumnType("integer"); + + b.Property("HochWert") + .HasColumnType("decimal(18,4)"); + + b.Property("Objektbezeichnung") + .IsRequired() + .HasColumnType("text"); + + b.Property("ProjektId") + .HasColumnType("integer"); + + b.Property("RechtsWert") + .HasColumnType("decimal(18,4)"); + + b.Property("SohlHoehe") + .HasColumnType("decimal(18,4)"); + + b.HasKey("Id"); + + b.HasIndex("ProjektId"); + + b.ToTable("Schaechte"); + }); + + modelBuilder.Entity("Shared.Domain.Kanal", b => + { + b.HasOne("Shared.Domain.Schacht", "EndSchacht") + .WithMany() + .HasForeignKey("EndSchachtId"); + + b.HasOne("Shared.Domain.Projekt", null) + .WithMany("Kanaele") + .HasForeignKey("ProjektId"); + + b.HasOne("Shared.Domain.Schacht", "StartSchacht") + .WithMany() + .HasForeignKey("StartSchachtId"); + + b.Navigation("EndSchacht"); + + b.Navigation("StartSchacht"); + }); + + modelBuilder.Entity("Shared.Domain.Projekt", b => + { + b.HasOne("Shared.Domain.Auftraggeber", "Auftraggeber") + .WithMany() + .HasForeignKey("AuftraggeberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Auftraggeber"); + }); + + modelBuilder.Entity("Shared.Domain.Schacht", b => + { + b.HasOne("Shared.Domain.Projekt", null) + .WithMany("Schaechte") + .HasForeignKey("ProjektId"); + }); + + modelBuilder.Entity("Shared.Domain.Projekt", b => + { + b.Navigation("Kanaele"); + + b.Navigation("Schaechte"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/SewerStammGen.EntityFramework/Migrations/20230329145638_AuftraggeberAddedToProject.cs b/SewerStammGen.EntityFramework/Migrations/20230329145638_AuftraggeberAddedToProject.cs new file mode 100644 index 0000000..685755b --- /dev/null +++ b/SewerStammGen.EntityFramework/Migrations/20230329145638_AuftraggeberAddedToProject.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace SewerStammGen.EntityFramework.Migrations +{ + /// + public partial class AuftraggeberAddedToProject : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "AuftraggeberId", + table: "Projekte", + type: "integer", + nullable: false, + defaultValue: 0); + + migrationBuilder.CreateIndex( + name: "IX_Projekte_AuftraggeberId", + table: "Projekte", + column: "AuftraggeberId"); + + migrationBuilder.AddForeignKey( + name: "FK_Projekte_Auftraggebers_AuftraggeberId", + table: "Projekte", + column: "AuftraggeberId", + principalTable: "Auftraggebers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Projekte_Auftraggebers_AuftraggeberId", + table: "Projekte"); + + migrationBuilder.DropIndex( + name: "IX_Projekte_AuftraggeberId", + table: "Projekte"); + + migrationBuilder.DropColumn( + name: "AuftraggeberId", + table: "Projekte"); + } + } +} diff --git a/SewerStammGen.EntityFramework/Migrations/SewerStammGenDbContextModelSnapshot.cs b/SewerStammGen.EntityFramework/Migrations/SewerStammGenDbContextModelSnapshot.cs index 4213582..ed5e0be 100644 --- a/SewerStammGen.EntityFramework/Migrations/SewerStammGenDbContextModelSnapshot.cs +++ b/SewerStammGen.EntityFramework/Migrations/SewerStammGenDbContextModelSnapshot.cs @@ -112,6 +112,9 @@ namespace SewerStammGen.EntityFramework.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + b.Property("AuftraggeberId") + .HasColumnType("integer"); + b.Property("Erstelldatum") .IsRequired() .HasColumnType("text"); @@ -136,6 +139,8 @@ namespace SewerStammGen.EntityFramework.Migrations b.HasKey("Id"); + b.HasIndex("AuftraggeberId"); + b.ToTable("Projekte"); }); @@ -195,6 +200,17 @@ namespace SewerStammGen.EntityFramework.Migrations b.Navigation("StartSchacht"); }); + modelBuilder.Entity("Shared.Domain.Projekt", b => + { + b.HasOne("Shared.Domain.Auftraggeber", "Auftraggeber") + .WithMany() + .HasForeignKey("AuftraggeberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Auftraggeber"); + }); + modelBuilder.Entity("Shared.Domain.Schacht", b => { b.HasOne("Shared.Domain.Projekt", null) diff --git a/SewerStammGen/HostBuilders/AddDBContextHostBuilderExtensions.cs b/SewerStammGen/HostBuilders/AddDBContextHostBuilderExtensions.cs index 86a7333..2e02f2f 100644 --- a/SewerStammGen/HostBuilders/AddDBContextHostBuilderExtensions.cs +++ b/SewerStammGen/HostBuilders/AddDBContextHostBuilderExtensions.cs @@ -1,6 +1,11 @@ -using Microsoft.Extensions.Hosting; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using SewerStammGen.EntityFramework; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -13,7 +18,24 @@ namespace SewerStammGen.HostBuilders { hostBuilder.ConfigureServices((context, services) => { - + string connectionString = ""; + Action configureDbContext = null; + string databaseToUse = context.Configuration.GetConnectionString("databaseToUse"); + Trace.WriteLine(databaseToUse); + if (databaseToUse.Equals("default")) + { + connectionString = context.Configuration.GetConnectionString("default"); + configureDbContext = o => o.UseNpgsql(connectionString); + } + else if (databaseToUse.Equals("sqlite")) + { + connectionString = context.Configuration.GetConnectionString("sqlite"); + configureDbContext = o => o.UseSqlite(connectionString); + } + + + services.AddDbContext(configureDbContext); + services.AddSingleton(new SewerStammGenDbContextFactory(configureDbContext)); }); return hostBuilder; } diff --git a/SewerStammGen/HostBuilders/AddServicesHostBuilderExtensions.cs b/SewerStammGen/HostBuilders/AddServicesHostBuilderExtensions.cs index c52ccc0..0c302e3 100644 --- a/SewerStammGen/HostBuilders/AddServicesHostBuilderExtensions.cs +++ b/SewerStammGen/HostBuilders/AddServicesHostBuilderExtensions.cs @@ -1,7 +1,10 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using SewerStammGen.EntityFramework.Services; using SewerStammGen.WPF.Interface.Navigator; using SewerStammGen.WPF.ViewModel.State.Navigation; +using Shared.Contracts; +using Shared.Domain; using System; using System.Collections.Generic; using System.Linq; @@ -18,6 +21,8 @@ namespace SewerStammGen.HostBuilders host.ConfigureServices(services => { services.AddSingleton(); + + services.AddSingleton, GenericDataService>(); }); return host; } diff --git a/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs b/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs index 01ab098..e5c06f2 100644 --- a/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs +++ b/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs @@ -3,6 +3,8 @@ using Microsoft.Extensions.Hosting; using SewerStammGen.WPF.Interface; using SewerStammGen.WPF.ViewModel; using SewerStammGen.WPF.ViewModel.Factories; +using Shared.Contracts; +using Shared.Domain; using System; using System.Collections.Generic; using System.Linq; @@ -36,7 +38,9 @@ namespace SewerStammGen.HostBuilders services.AddSingleton>(services => { - return () => new ProjektListViewModel(); + return () => new ProjektListViewModel( + services.GetRequiredService>() + ); }); services.AddSingleton(); diff --git a/SewerStammGen/SewerStammGen.WPF.csproj b/SewerStammGen/SewerStammGen.WPF.csproj index bb89541..794406a 100644 --- a/SewerStammGen/SewerStammGen.WPF.csproj +++ b/SewerStammGen/SewerStammGen.WPF.csproj @@ -17,6 +17,10 @@ + + + + Always diff --git a/SewerStammGen/ViewModel/Projekt/ProjektListViewModel.cs b/SewerStammGen/ViewModel/Projekt/ProjektListViewModel.cs index 2382b34..707b8ed 100644 --- a/SewerStammGen/ViewModel/Projekt/ProjektListViewModel.cs +++ b/SewerStammGen/ViewModel/Projekt/ProjektListViewModel.cs @@ -1,6 +1,10 @@ -using SewerStammGen.WPF.ViewModel; +using SewerStammGen.EntityFramework.Services; +using SewerStammGen.WPF.ViewModel; +using Shared.Contracts; +using Shared.Domain; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,5 +13,31 @@ namespace SewerStammGen.WPF.ViewModel { public class ProjektListViewModel : BaseViewModel { + private IDataService genericDataService; + private readonly ObservableCollection Projekte; + + public ProjektListViewModel(IDataService generic) + { + Projekte = new ObservableCollection(); + if (generic == null) throw new ArgumentNullException(nameof(generic)); + this.genericDataService = generic; + + LoadProjekte(); + } + + private async void LoadProjekte() + { + var projects = await genericDataService.GetAll(); + InitCollection(Projekte, projects); + } + + private void InitCollection(ObservableCollection projekte, IEnumerable projects) + { + projekte.Clear(); + foreach(var i in projects) + { + projekte.Add(i); + } + } } } diff --git a/SewerStammGen/appsettings.json b/SewerStammGen/appsettings.json index 0da8e7f..dc92573 100644 --- a/SewerStammGen/appsettings.json +++ b/SewerStammGen/appsettings.json @@ -1,7 +1,7 @@ { "ConnectionStrings": { "databaseToUse": "default", - "default": "Host = localhost; Database = dasaso; Username = kansan; Password = kansan", + "default": "Host = localhost; Database = SewerGen; Username = SewerGen; Password = SewerGen", "sqlite": "Data Source=database.db" } } \ No newline at end of file