2009-03-18 11 views
0

Ich gehe durch eine XML-Datei von Artikeln und den Journalisten, die sie geschrieben haben. Da wir die Artikel in _Daten unseren Datacontext hinzufügen können wir über einen Journalisten gekommen, dass das Hinzufügen muss, so dass wir dies tun: Doch anschließendIn einem Datenkontext werden Werte eingefügt, die erst nach dem Senden von Änderungen im Datenkontext verfügbar sind.

newJourno = New journalist With {.name = strJournalist} 
_Data.journalists.InsertOnSubmit(newJourno) 
.articles_journalists.Add(New articles_journalist With {.id_journalist = newJourno.id,   .id_article = .id}) 

können wir auf diesen gleichen Journalisten wieder kommen und nichts zurückgegeben wird, wenn wir dies tun:

Dim journo = _Data.journalists.Where(Function(s) s.name = strJournalist).SingleOrDefault 

So verwendet es den obigen Code erneut, um den gleichen Journalisten wieder einzufügen.

Sobald alle unsere Inserts fertig sind, machen wir einen Sendungswechsel. An dieser Stelle hat es eine Kopfanpassung:

INSERT-Anweisung im Konflikt mit COLUMN FOREIGN KEY Einschränkung 'FK_articles_journalists_journalists'. Der Konflikt ist in der Datenbank "blah", Tabelle "Journalisten", Spalte "id" aufgetreten. Die Anweisung wurde beendet.

Aus dem Blick durch die SQL in Profiler generiert sehen Sie, dass es versucht, einige Journalisten mehr als einmal hinzuzufügen, wird dies fehlschlagen, da der Name eindeutig sein muss. Die nachfolgenden Aufzeichnungen, die versucht werden, mit diesen Journalisten eingefügt zu werden, scheitern, da der Journalist nicht aktualisiert wurde.

Sicher, wenn ich eine Sammlung von Journalisten habe, fügen Sie einige hinzu und dann in meiner Sammlung suchen ich sollte sie alle und nicht nur die ursprünglichen sehen. Ich kann es schummeln, denke ich, indem ich einen submitchanges mache, aber das scheint ein bisschen albern.

Vielen Dank im Voraus,

Dave.

Antwort

2

Wenn Sie der Datenbank zwei Child-Parent-Zeilen hinzufügen möchten, müssen Sie die Entität zuweisen, statt der ID-Spalte wird die ID automatisch generiert und ist erst verfügbar, nachdem die Übergaben geändert wurden.

Sie haben ein articles_journalist Objekt zu tun, und ordnen Sie dann die newJourno Einheit dazu:

articles_journalist.journalist = newJourno; 
+1

Danke dafür, ich kann es jetzt gut eingefügt bekommen. Das ursprüngliche Problem bleibt jedoch bestehen, da ich 7 Veröffentlichungen in _data habe. Ich mache eine _data.publications.insertonsubmit und es sind noch 7 Publikationen drin. Muss ich jedes Mal Änderungen einreichen? Danke allen! – DaveEHS

0

CMS Recht ist über das Müssen das Objekt, nicht die ID zuzuweisen.

Dies scheint jedoch das Problem des datacontext nicht zu umgehen, ohne zu merken, dass neue Dinge hinzugefügt wurden, bis Sie Änderungen senden. Ich kann nur vermuten, dass dies von Entwurf ist, und daher rufe ich jetzt submissionchanges auf, wenn der Code Objekte einfügt, nach denen wir später suchen.

+0

habe ich manchmal gleich. Suchen Sie nach einer Spalte, die Sie nach "Unfall" festlegen. Sie brauchen InsertOnSubmit nicht, wenn Sie auf entities verweisen. Das 'Hinzufügen' wird es automatisch zum Einfügen verfügbar machen. – leppie

+1

Danke, aber ich habe keine Add-Option (das war, was ich in erster Linie tun wollte), vermutlich weil dies ein 'Top Level' Objekt in meinem Datenkontext ist. – DaveEHS

0

"Der Name muss eindeutig sein."

Dies ist ein ernsthafter Konstruktionsfehler. Personennamen sind niemals eindeutig.

+0

Ich spreche über das Auffüllen einer Nachschlagetabelle, innerhalb derer die Person einen eindeutigen Namen haben muss. Wenn 2 Personen den gleichen Namen haben, verwenden sie denselben Datensatz in der Nachschlagetabelle. Es ist nur für einen Journalistennamen, wir binden es nicht in Benutzerkonten oder etwas ... – DaveEHS