2008-10-13 32 views
6

tôi có 2 lớp học với một hiệp hội LINQ giữa chúng ví dụ:Làm thế nào để thay đổi giá trị của trường liên quan đến

Table1:  Table2: 
ID   ID 
Name   Description 
       ForiegnID 

Hiệp hội ở đây là giữa Table1.ID -> Table2.ForiegnID

tôi cần để có thể thay đổi giá trị của Table2.ForiegnID, tuy nhiên tôi không thể và nghĩ rằng đó là vì sự liên kết (như khi tôi gỡ bỏ nó, nó hoạt động).

Vì vậy, có ai biết cách tôi có thể thay đổi giá trị của trường được liên kết Table2.ForiegnID không?

Trả lời

7

Kiểm tra tệp designer.cs. Đây là thuộc tính của khóa

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

Và đây là thuộc tính liên kết.

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

Tốt nhất là chỉ định thay đổi thông qua liên kết thay vì khóa. Bằng cách đó, bạn không phải lo lắng về việc liệu cha mẹ có được tải hay không.

+0

Có thể ở trên thứ gì đó ở đó, vui lòng mở rộng trên đó – HAdes

+0

Cảm ơn bạn có ý nghĩa hơn. – HAdes

0

Bạn muốn liên kết với một bản ghi khác trong bảng 1 hoặc thay đổi table1.id? nếu đó là tùy chọn 1, bạn cần xóa liên kết đó và đặt một liên kết mới. Nếu tùy chọn 2, hãy kiểm tra db của bạn và xem liệu cập nhật thác có được bật cho fk này hay không và nhận bản ghi và thay đổi giá trị của id.

1
Table1:  Table2: 
ID   ID 
Name   Description 
       ForeignID 

Với điều này:

Table2.ForeignID = 2

bạn nhận được một lỗi ..........

Ví dụ:

Bạn có thể thay đổi Trường ForeignID trong Bảng 2 whit này:

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

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

Trường hợp biến số newId là id của bản ghi trong Bảng 2 mà bạn muốn liên kết whit bản ghi trong Bảng 1

Các vấn đề liên quan