Projekte hinzugefügt

This commit is contained in:
2023-03-29 17:04:39 +02:00
parent a4c5b84ccf
commit e5214e44c3
9 changed files with 369 additions and 5 deletions

View File

@@ -0,0 +1,233 @@
// <auto-generated />
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
{
/// <inheritdoc />
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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Ansprechpartner")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Ort")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Postleitzahl")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Strasse")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Telefonnummer")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Auftraggebers");
});
modelBuilder.Entity("Shared.Domain.Kanal", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("DN")
.HasColumnType("integer");
b.Property<int?>("EndSchachtId")
.HasColumnType("integer");
b.Property<int>("Entwaesserung")
.HasColumnType("integer");
b.Property<decimal>("Haltungslaenge")
.HasColumnType("numeric");
b.Property<string>("Material")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Objektbezeichnung")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ProjektId")
.HasColumnType("integer");
b.Property<int?>("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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("AuftraggeberId")
.HasColumnType("integer");
b.Property<string>("Erstelldatum")
.IsRequired()
.HasColumnType("text");
b.Property<int>("ExportType")
.HasColumnType("integer");
b.Property<int>("Kodierungssystem")
.HasColumnType("integer");
b.Property<string>("Ort")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Projektname")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Strasse")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("AuftraggeberId");
b.ToTable("Projekte");
});
modelBuilder.Entity("Shared.Domain.Schacht", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<decimal>("DeckelHoehe")
.HasColumnType("decimal(18,4)");
b.Property<int>("Entwaesserung")
.HasColumnType("integer");
b.Property<decimal>("HochWert")
.HasColumnType("decimal(18,4)");
b.Property<string>("Objektbezeichnung")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ProjektId")
.HasColumnType("integer");
b.Property<decimal>("RechtsWert")
.HasColumnType("decimal(18,4)");
b.Property<decimal>("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
}
}
}

View File

@@ -0,0 +1,50 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace SewerStammGen.EntityFramework.Migrations
{
/// <inheritdoc />
public partial class AuftraggeberAddedToProject : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
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);
}
/// <inheritdoc />
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");
}
}
}

View File

@@ -112,6 +112,9 @@ namespace SewerStammGen.EntityFramework.Migrations
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("AuftraggeberId")
.HasColumnType("integer");
b.Property<string>("Erstelldatum") b.Property<string>("Erstelldatum")
.IsRequired() .IsRequired()
.HasColumnType("text"); .HasColumnType("text");
@@ -136,6 +139,8 @@ namespace SewerStammGen.EntityFramework.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.HasIndex("AuftraggeberId");
b.ToTable("Projekte"); b.ToTable("Projekte");
}); });
@@ -195,6 +200,17 @@ namespace SewerStammGen.EntityFramework.Migrations
b.Navigation("StartSchacht"); 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 => modelBuilder.Entity("Shared.Domain.Schacht", b =>
{ {
b.HasOne("Shared.Domain.Projekt", null) b.HasOne("Shared.Domain.Projekt", null)

View File

@@ -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;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -13,7 +18,24 @@ namespace SewerStammGen.HostBuilders
{ {
hostBuilder.ConfigureServices((context, services) => hostBuilder.ConfigureServices((context, services) =>
{ {
string connectionString = "";
Action<DbContextOptionsBuilder> 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<SewerStammGenDbContext>(configureDbContext);
services.AddSingleton<SewerStammGenDbContextFactory>(new SewerStammGenDbContextFactory(configureDbContext));
}); });
return hostBuilder; return hostBuilder;
} }

View File

@@ -1,7 +1,10 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using SewerStammGen.EntityFramework.Services;
using SewerStammGen.WPF.Interface.Navigator; using SewerStammGen.WPF.Interface.Navigator;
using SewerStammGen.WPF.ViewModel.State.Navigation; using SewerStammGen.WPF.ViewModel.State.Navigation;
using Shared.Contracts;
using Shared.Domain;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -18,6 +21,8 @@ namespace SewerStammGen.HostBuilders
host.ConfigureServices(services => host.ConfigureServices(services =>
{ {
services.AddSingleton<IMainWindowNavigator, MainWindowNavigator>(); services.AddSingleton<IMainWindowNavigator, MainWindowNavigator>();
services.AddSingleton<IDataService<Projekt>, GenericDataService<Projekt>>();
}); });
return host; return host;
} }

View File

@@ -3,6 +3,8 @@ using Microsoft.Extensions.Hosting;
using SewerStammGen.WPF.Interface; using SewerStammGen.WPF.Interface;
using SewerStammGen.WPF.ViewModel; using SewerStammGen.WPF.ViewModel;
using SewerStammGen.WPF.ViewModel.Factories; using SewerStammGen.WPF.ViewModel.Factories;
using Shared.Contracts;
using Shared.Domain;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -36,7 +38,9 @@ namespace SewerStammGen.HostBuilders
services.AddSingleton<CreateViewModel<ProjektListViewModel>>(services => services.AddSingleton<CreateViewModel<ProjektListViewModel>>(services =>
{ {
return () => new ProjektListViewModel(); return () => new ProjektListViewModel(
services.GetRequiredService<IDataService<Projekt>>()
);
}); });
services.AddSingleton<IViewModelAbstractFactory, MainWindowViewModelFactory>(); services.AddSingleton<IViewModelAbstractFactory, MainWindowViewModelFactory>();

View File

@@ -17,6 +17,10 @@
<PackageReference Include="Syncfusion.SfGrid.WPF" Version="20.4.0.54" /> <PackageReference Include="Syncfusion.SfGrid.WPF" Version="20.4.0.54" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SewerStammGen.EntityFramework\SewerStammGen.EntityFramework.csproj" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<None Update="appsettings.json"> <None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>

View File

@@ -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;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -9,5 +13,31 @@ namespace SewerStammGen.WPF.ViewModel
{ {
public class ProjektListViewModel : BaseViewModel public class ProjektListViewModel : BaseViewModel
{ {
private IDataService<Projekt> genericDataService;
private readonly ObservableCollection<Projekt> Projekte;
public ProjektListViewModel(IDataService<Projekt> generic)
{
Projekte = new ObservableCollection<Projekt>();
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<Projekt> projekte, IEnumerable<Projekt> projects)
{
projekte.Clear();
foreach(var i in projects)
{
projekte.Add(i);
}
}
} }
} }

View File

@@ -1,7 +1,7 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"databaseToUse": "default", "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" "sqlite": "Data Source=database.db"
} }
} }