Как изменить значение связанного поля - PullRequest
6 голосов
/ 13 октября 2008

У меня есть 2 класса с ассоциацией LINQ между ними, т.е.

Table1:       Table2:
ID            ID
Name          Description
              ForiegnID

Связь между Table1.ID -> Table2.ForiegnID

Мне нужно иметь возможность изменить значение Table2.ForiegnID, однако я не могу и думаю, что это из-за ассоциации (например, когда я его удаляю, это работает).

Следовательно, кто-нибудь знает, как мне изменить значение связанного поля Table2.ForiegnID?

Ответы [ 3 ]

7 голосов
/ 13 октября 2008

Проверьте файл 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");
        }
    }
}

Лучше всего назначать изменения через связь вместо ключа. Таким образом, вам не нужно беспокоиться о том, загружен ли родитель.

1 голос
/ 08 мая 2009
Table1:       Table2:
ID            ID
Name          Description
              ForeignID

С этим:

Table2.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

0 голосов
/ 13 октября 2008

Вы хотите связать с другой записью в table1 или изменить table1.id? если это вариант 1, вам нужно удалить эту связь и установить новую. Если вариант 2, проверьте свою базу данных и посмотрите, включен ли каскад обновления yes для этого fk, а затем получите запись и измените значение id.

...