FK ändern mit LINQ to SQL

marcoD

Grünschnabel
Hallo zusammen!
Ich habe ein kleines Problem mit meiner SQL-Datenbank...
Ich versuche einen FK einer bereits geladenen Datenbank zu verändern. LINQ verhindert dies und spuckt folgende Exception aus: "ForeignKeyReferenceAlreadyHasValueException"
Kann mir da jmd helfen? Habe schon so einiges versucht, finde aber den Fehler nicht.

Zusammenfassung:
-ConflictMode bereits versucht, keine Änderung bewirkt
-Datenbindungen(an Steuerelemente) sind keine vorhanden
-Es handelt sich um Adresse n:1 Land
Adresse
  • ID(PK)
  • Straße
  • HausNr
  • Länderkennung(FK)

Land
  • Länderkennung(PK)
  • Länderbezeichnung

-ändern möchte ich dementsprechend "Länderkennung" in Adresse (von DE zu AT zB)


hier mein Code:
Code:
public void ChangePAdresse(int id, string adresseStr, string adresseHnr, string adresseLnd)
{                               
Table<TAdresse> Adressen= db.GetTable<TAdresse>();
        IQueryable<TAdresse> Adresse =
            from ad in Adressen
            where ad.ID == id
            select ad;

        foreach (TAdresse ad in Adresse)
        {
            ad.strasse = adresseStr;
            ad.hausNr = adresseHnr;           
            ad.laenderkennung = adresseLnd;
        }
        db.SubmitChanges();
}
 
Zuletzt bearbeitet:
Keine Antworten? Ist meine Beschreibung unschlüssig oder ist die Problemstellung zu schwer?
Vielleicht nen Tip an wen ich mich wenden könnte? Ohne diese FK-Änderung bin ich ziemlich aufgeschmissen... :(
 
Immer noch keine Antworten :(
Scheinbar handelt es sich um ein "schwieriges" Problem. Finde es nur schade, dass nichtmal ein weiterführender Link gepostet wurde.
Naja, hier kann dann wohl zu. :(
 
Habe mittlerweile die Antwort gefunden und möchte sie euch nicht vorenthalten.
Man kann den FK nicht direkt ändern, da sonst eine Inkonsistenz zwischen geladenen Objekten entstehen kann.
Aus diesem Grund, muss man ein komplettes Objekt übergeben und nicht nur ein Attributwert ändern.

Also so:
Wobei "Land" ein Objekt vom Typ TLand ist.
Adresse.TLand = Land;
 
Zurück