ASP.NET - Relations-Problem

  • C#

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von AliveDevil.

    ASP.NET - Relations-Problem

    Wieso ist meine Überschrift nur so unverständlich?
    Naja egal.
    Folgendes ist gegeben:

    Füge ich nun per Code einen Eintrag in "Nachrichten" ein, wird das auch sauber durchgeführt.
    Code dafür ist irrelevant. (Ich nutze Entity Data Model)

    Möchte ich nun aber in "Nachrichten" eine weitere Zeile einfügen, schmiert mir die Seite mit folgendem Fehler ab:

    Quellcode

    1. Eine Beziehung im AssociationSet 'NachrichtenUser' befindet sich im Zustand 'Deleted'. Angesichts der Multiplizitätseinschränkungen muss sich ein entsprechendes 'Nachrichten'-Element ebenfalls im Zustand 'Deleted' befinden.

    Der Fehler tritt beim Aufrufen von

    C#-Quellcode

    1. DatenbankInstanz.SaveChanges();
    auf.

    Über Google konnte ich dazu nichts finden, hoffe ihr könnt mir helfen :D
    ohne auf die fehlermeldung einzugehen ... das model ergibt in meinen augen so kein sinn ...
    da du das attribut in "user" "nachrichten" nennst (mehrzahl) gäb es in der entity "user" einen user mehrfach sobald er mehrere nachrichten hat ...
    ich würde das eher so abbilden

    Brainfuck-Quellcode

    1. +-------------+----------------< >----------------+-------------+
    2. | user | | | nachricht |
    3. +-------------+ +----------------------------+ +-------------+
    4. | userid | | sender (fk:userid) | | nachrichtid |
    5. | [some data] | | empfaenger (fk:userid) | | text |
    6. | ... | | nachricht (fk:nachrichtid) | | ... |
    7. +-------------+ +----------------------------+ +-------------+
    naja - das modell könnte prinzipiell schon Sinn ergeben, etwa wenn Nachricht die Mittlertabelle einer m:n - Relation der Tabelle User mit sich selbst ist.
    Dann wäre eine Nachricht etwas, was zwei User miteinander verbindet.
    Aber im gezeigten Modell hat Nachricht keinerlei Text (oder anneren Inhalt), und scheint von daher sinnlos.
    Auch ist unerklärlich, warum zwei verschiedene Typen Relation gesetzt sind. Jedenfalls die Symbole für die Relation sind unterschiedlich (ich weiß aber nicht, was diese Symbole bedeuten).

    Aber das könnte AD (sorry - ich schreibe den Namen nicht aus) wohl aufklären.
    Passt schon, wenn man meinen Namen nicht ausschreibt.

    Zu den verschiedenen Relationen: Ein User kann mehrere Nachrichten verschicken, aber eine Nachricht kann nur einen Empfänger (User) haben.
    * ist eine Auflistung.
    1 ist genau ein Objekt
    0..1 keins oder ein Objekt


    Okay..dann eben mal den Teil, der das betrifft.
    Aber ein Empfänger kann mehrere Nachrichten empfangen haben.
    Daher ist die Relation
    Empfänger->Nachricht
    eine ganz identische 1:n - Relation wie die Relation
    User->Nachricht

    Diese Doppel-Relation: User->Nachricht<-Empfänger bezeichnet man auch als m:n - Relation.

    Und das witzige ist hier halt, dass User=Empfänger, also eine m:n - Relation mit sich selbst.

    Und es gibt auch keine Nachricht, die nicht beides hat: sowohl einen Sender als auch einen Empfänger.
    Daher muß die Relation immer von 1...* gehen.

    möglicherweise behebt das auch den Fehler.