2008-10-13 8 views
6

Ich habe 2 Klassen mit einer LINQ Assoziation zwischen ihnen wechseln, dh:Wie der Wert der zugeordneten Feld

Table1:  Table2: 
ID   ID 
Name   Description 
       ForiegnID 

Der Verein ist hier zwischen Table1.ID -> Table2.ForiegnID

I müssen in der Lage sein, den Wert von Table2.ForiegnID zu ändern, jedoch kann ich nicht und denke, dass es wegen der Assoziation ist (wie wenn ich es entferne, funktioniert es).

Daher weiß jemand, wie ich den Wert des zugehörigen Feldes Table2.ForiegnID ändern kann?

Antwort

7

Überprüfen Sie die Designer.cs-Datei. Dies ist die Eigenschaft des Schlüssels

[Column(Storage="_ParentKey", DbType="Int")] 
public System.Nullable<int> ParentKey 
{ 
    get 
    { 
     return this._ParentKey; 
    } 
    set 
    { 
     if ((this._ParentKey != value)) 
     { 
      //This code is added by the association 
      if (this._Parent.HasLoadedOrAssignedValue) 
      { 
       throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException(); 
      } 
      //This code is present regardless of association 
      this.OnParentKeyChanging(value); 
      this.SendPropertyChanging(); 
      this._ParentKey = value; 
      this.SendPropertyChanged("ParentKey"); 
      this.OnServiceAddrIDChanged(); 
     } 
    } 
} 

Und das ist die Assoziationseigenschaft.

[Association(Name="Parent_Child", Storage="_Parent", ThisKey="ParentKey", IsForeignKey=true, DeleteRule="CASCADE")] 
public Parent Parent 
{ 
    get 
    { 
     return this._Parent.Entity; 
    } 
    set 
    { 
     Parent previousValue = this._Parent.Entity; 
     if (((previousValue != value) 
        || (this._Parent.HasLoadedOrAssignedValue == false))) 
     { 
      this.SendPropertyChanging(); 
      if ((previousValue != null)) 
      { 
       this._Parent.Entity = null; 
       previousValue.Exemptions.Remove(this); 
      } 
      this._Parent.Entity = value; 
      if ((value != null)) 
      { 
       value.Exemptions.Add(this); 
       this._ParentKey = value.ParentKey; 
      } 
      else 
      { 
       this._ParentKey = default(Nullable<int>); 
      } 
      this.SendPropertyChanged("Parent"); 
     } 
    } 
} 

Es ist am besten, Änderungen über die Zuordnung anstelle des Schlüssels zuzuweisen. Auf diese Weise müssen Sie sich keine Gedanken darüber machen, ob der Elternteil geladen ist.

+0

Könnte auf etwas da sein, können Sie bitte auf das erweitern – HAdes

+0

Dank macht das mehr Sinn. – HAdes

0

Sie möchten mit einem anderen Datensatz in Tabelle1 verknüpfen oder Tabelle1.id ändern? Wenn es Option 1 ist, müssen Sie diese Zuordnung entfernen und eine neue festlegen. Wenn Option 2, überprüfen Sie db und sehen, ob update Kaskade ja für diese fk aktiviert und dann Datensatz und ändern Sie den Wert der ID.

1
Table1:  Table2: 
ID   ID 
Name   Description 
       ForeignID 

mit diesem:

Table2.ForeignID = 2

Sie erhalten einen Fehler ..........

Beispiel:

können Sie ändern ForeignID Feld in Tabelle 2 mit diesem:

Table2 table = dataContext.Table2.single(d => d.ID == Id) 

    table.Table1 = dataContext.Table1.single(d => d.ID == newId); 

Wo die Variable newId ist die ID des Datensatzes in Tabelle 2, die Sie möchten mit dem Datensatz in Tabelle 1 assoziieren

Verwandte Themen