У меня есть 2 класса с ассоциацией LINQ между ними, то есть:
Table1: Table2:
ID ID
Name Description
ForiegnID
Здесь связь между Table1.ID -> Table2.ForiegnID
Мне нужно иметь возможность изменить значение Table2.ForiegnID, однако я не могу и думаю, что это из-за ассоциации (когда я ее удаляю, она работает).
Следовательно, кто-нибудь знает, как я могу изменить значение связанного поля Table2.ForiegnID?





Вы хотите связать с другой записью в table1 или изменить table1.id? если это вариант 1, вам нужно удалить эту ассоциацию и установить новую. Если вариант 2, проверьте свою базу данных и посмотрите, включен ли каскад обновления для этого fk, а затем получите запись и измените значение идентификатора.
Посмотрите файл designer.cs. Это свойство ключа
[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();
}
}
}
И это собственность ассоциации.
[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");
}
}
}
Лучше всего назначать изменения через ассоциацию вместо ключа. Таким образом, вам не нужно беспокоиться о том, загружен ли родительский элемент.
Table1: Table2:
ID ID
Name Description
ForeignID
С этим :
Таблица2.ForeignID = 2
вы получаете сообщение об ошибке ..........
Пример :
Вы можете изменить поле ForeignID в таблице 2 следующим образом:
Table2 table = dataContext.Table2.single(d => d.ID == Id)
table.Table1 = dataContext.Table1.single(d => d.ID == newId);
Где переменная newId - это идентификатор записи в таблице 2, которую вы хотите связать с записью в таблице 1.