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