代码之家  ›  专栏  ›  技术社区  ›  HAdes

如何更改关联字段的值

  •  6
  • HAdes  · 技术社区  · 16 年前

    我有两个班,他们之间有LINQ关联,即:

    Table1:       Table2:
    ID            ID
    Name          Description
                  ForiegnID
    

    这里的联系是在 表1.id->表2.foriegnid

    我需要能够更改table2.foriegnid的值,但是我不能并且认为这是因为关联(当我删除它时,它起作用)。

    因此,是否有人知道如何更改关联字段table2.foriegnid的值?

    3 回复  |  直到 12 年前
        1
  •  7
  •   cuongle    12 年前

    查看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();
            }
        }
    }
    

    这是Associations属性。

    [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");
            }
        }
    }
    

    最好通过关联而不是键来分配更改。这样,您就不必担心父级是否已加载。

        2
  •  1
  •   Gabriele    15 年前
    Table1:       Table2:
    ID            ID
    Name          Description
                  ForeignID
    

    用这个:

    表2.Foreigned=2

    您收到一个错误……

    例子:

    您可以将表2中的异种字段更改为:

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

    其中变量 newId 是表2中要与表1中的记录关联的记录的ID

        3
  •  0
  •   ljs TheVillageIdiot    16 年前

    您想与表1中的另一条记录关联还是更改表1.id? 如果是选项1,则需要删除该关联并设置新的关联。 如果选项2,请检查您的数据库,并查看是否为此FK启用了update cascade yes,以及获取ID的记录和更改值。