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

Von einer serialisierten Datei auf Objekt in einer anderen serialsierten Datei verweisen
Merti_berg
myCSharp.de - Member



Dabei seit:
Beiträge: 91

Themenstarter:

Von einer serialisierten Datei auf Objekt in einer anderen serialsierten Datei verweisen

beantworten | zitieren | melden

Hallo,

Ich wollt jetzt mal mein Glück hier versuchen, eventuell verhilft es mir ja zur Lösung :)


Erstmal kurz worum es geht:

Ich soll ich Programm schreiben welches zur Datenverwaltung dient, die Daten bestehen aus: Geräte -> Diese enthalten Baugruppen -> Diese enthalten Bauteile.

Es muss zu jedem Bauteil angegeben werden die oft dieses Teil für die benötigte Baugruppe/Gerät vorhanden sein muss.

Ein Bauteil darf nicht 2x vorkommen, wenn ich Gerät1 eine bestimmte Schraube vorkommt die man in Gerät2 wieder brauch muss sie da sozusagen "verlinkt" werden, also es sollen dann keine 2 Datensätze in der Datei stehen.

Man kann ein Gerät/Baugruppe auswählen und dies zu einer Bestellliste hinzufügen, dafür wird dann auch die Information benötigt wie oft das Teil benötigt wird in dem Gerät/Baugruppe

Die interne Nummerrierung sollte wie folgt lauten, laut Aufgabenstellung:

001. Gerät
001.001 Baugruppe
001.001.001 Bauteil

Mein Problem ist nun bzw da wo ich festhänge, wir dürfen keine direkte Datenbank verwenden. Es muss alles in einer serialisierten Datei Datei stehen. Mein Gedanke war eventuell ein Datatable zu nehmen und diesen dann immer zu (de-)serialisieren.

Das wäre ja auch alles halb so wild, nur weiß ich nicht so recht wie ich das anstelle das dann 1 Teil in mehreren Geräten vorkommen kann.
Zudem kann man auch neue Teile zu bestehenden Geräten/Baugruppen hinzufügen oder diese komplett neu erstellen. Man kann natürlich auch bestehende Bauteile suchen und diese in die neuen Geräte/Baugruppen einfügen.

Hier komme ich nun nicht weiter, habe mich auch schon mehrmals mit meinem "Team" beraten aber wir kommen zu keiner wirklich Lösung. Das Projekt ist für die Berufsschule, also nichts Großes. Unser Lehrer meinte auch das es relativ simpel ist, nur kann ich dem noch nicht ganz Glauben schenken.

Ich will kein fertiges Programm, nicht das dass falsch rüberkommt, ich würde nur gern wissen wie ich das am besten mit den bestehenden Teilen/hinzufügen von neuen Teilen löse ohne Datenbank.
private Nachricht | Beiträge des Benutzers
MartinZa
myCSharp.de - Member



Dabei seit:
Beiträge: 51
Herkunft: Bavaria

beantworten | zitieren | melden

Hallo Merti_berg,

schau dir doch einfach mal die Klasse System.Data.DataSet an. Das DataSet kann mehrere DataTables enthalten. Damit kannst du dann deine "Datenbank" nachbauen. Ebenso kannst du auch Relationen zwischen Tabellen erstellen.

Gruß

Martin
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.767
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Hallo Merti,

das was Du suchst nennt man "Stückliste".

Du brauchst mind. 2 Tabellen, eine für die Geräte / Baugruppen / Bauteile und eine für die Verknüpfung mit folgenden Feldern :

- Artikel-Nummer Parent
- fortl. Nr.
- Menge
- Artikel-Nummer Child

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Merti_berg,

Serialisierung erhält Identität nur in der Weise, dass ein Objekt, das mehrfach in dem serialisieren Objektgraphen verlinkt ist, bei Laden auch wieder nur einmal im Objektbaum enthalten ist. Ansonsten ist Serialisierung nicht gerade darauf ausgelegt, Identität zu erhalten. Schon alleine, wenn man eine Datei zweimal deserialisiert, hat man alle Objekte doppelt.

Ein Objekt, das in zwei Objektgraphen, die unabhängig von einander serialisiert werden, enthalten ist, wird auch zweimal serialisiert.

Verhindern könntest du das durch Proxies bzw. Surrogate. Und dann die echten Objekte einzeln in separate Dateien serialisieren. Ein Surrogat muss dann schauen, ob das Objekt, für das es steht schon im Speicher ist und es nur (einmal) laden, wenn es noch nicht vorhanden ist.

Allerdings viel Aufwand für etwas, was man mit einer Datenbank viel leichter haben könnte. Und geradezu irrwitzig, wenn man bedenkt, dass ihr ja wohl nur deshalb auf eine Datenbank verzichten sollt, damit das Programm einfacher wird.

herbivore
private Nachricht | Beiträge des Benutzers
Merti_berg
myCSharp.de - Member



Dabei seit:
Beiträge: 91

Themenstarter:

beantworten | zitieren | melden

Hallo herbivore,

Ja da hast du Recht, ich habe von den Begriffen die du genannt hast nur ansatzweise was gehört bis jetzt.

Wir sind in unserem Berufsschulklassen-Team 3 FiSi und 2 FiAe, das wäre für uns gar nicht schaffbar, allein von der Zeit her.

Deswegen wollte ich hier nachfragen ob eventuell jemand eine simple Lösung weiß da wir, wie gesagt, nich mehr weiterwissen, der Post von dir und BerndFfm/MartinZa hat da schon ein wenig weiter geholfen
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Merti_berg,

das einfachste wäre sicher statt einer Datenbank eine XML-Datei oder CSV-Datei zu nehmen. Das muss man nicht mal ausprogrammieren, sondern so weit ich weiß kann man solche Dateien direkt in eine DataTable laden bzw. aus einer DataTable direkt in solche Dateien schreiben.

herbivore
private Nachricht | Beiträge des Benutzers