I have 2 classes with a LINQ association between them i.e.:
Table1: Table2:
ID ID
Name Description
ForiegnID
<
You wanna to associate with another record in table1 or change table1.id? if it's option 1, you need to remove that association and set a new one. If option 2, check you db and see if update cascade yes enabled for this fk and than get record and change value of id.
Check out the designer.cs file. This is the key's property
[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();
}
}
}
And this is the associations property.
[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");
}
}
}
It's best to assign changes through the association instead of the key. That way, you don't have to worry about whether the parent is loaded.
Table1: Table2:
ID ID
Name Description
ForeignID
With this :
Table2.ForeignID = 2
you receive an error..........
Example :
You can change ForeignID field in Table 2 whit this :
Table2 table = dataContext.Table2.single(d => d.ID == Id)
table.Table1 = dataContext.Table1.single(d => d.ID == newId);
Where the variable newId
is the id of the record in Table 2 that would you like associate whit the record in Table 1