2008-09-30 140 views
0

我正在使用LINQ to SQL和C#。我有兩個LINQ類:用戶和網絡。LINQ提交更改不提交更改

用戶具有用戶ID(主鍵)和NETWORKID

網絡具有NETWORKID(主鍵)和一個AdminID(用戶ID)

下面的代碼正常工作:

user.Network.AdminID = 0; 
db.SubmitChanges(); 

然而,如果在進行更改之前訪問AdminID,則更改從不會發生在數據庫中。所以下面不起作用:

if(user.Network.AdminID == user.UserID) 
{ 
    user.Network.AdminID = 0; 
    db.SubmitChanges(); 
} 

它使它進入if語句並調用提交更改。出於某種原因,對AdminID的更改從未將其更改爲DB。沒有錯誤拋出,改變從來沒有'需要'。

任何想法可能會造成這種情況?

謝謝。

回答

2

我剛跑過一個快速測試,它對我來說工作正常。

我不想問這個,但你確定if語句返回true嗎?這可能是你只是沒有觸及改變數值的代碼。

除此之外,我們可能需要更多信息。該成員的屬性是什麼?在調用SubmitChanges之前,你是否已經追溯到set語句以確保設置值?在SubmitChanges之後,Linq實體是否具有新值?或者,數據庫和Linq實體都無法獲得新值?

總之,該代碼應該工作...所以別的地方可能是錯誤的。

0

這是原來的post


這裏是由LinqToSql設計器生成的setter。

代碼段

{ 
    Contact previousValue = this._Contact.Entity; 
    if (((previousValue != value) 
    || (this._Contact.HasLoadedOrAssignedValue == false))) 
    { 
    this.SendPropertyChanging(); 
    if ((previousValue != null)) 
    { 
     this._Contact.Entity = null; 
     previousValue.ContactEvents.Remove(this); 
    } 
    this._Contact.Entity = value; 
    if ((value != null)) 
    { 
     value.ContactEvents.Add(this); 
     this._ContactID = value.ID; 
    } 
    else 
    { 
     this._ContactID = default(int); 
    } 
    this.SendPropertyChanged("Contact"); 
    } 
} 

該行設置兒童的財產父。

this._Contact.Entity = value; 

這條線增加了孩子的父母的集合

value.ContactEvents.Add(this); 

二傳手的ID沒有第二條線。

因此,與自動生成的實體... 此代碼生成一個意外的行爲:

myContactEvent.ContactID = myContact.ID; 

該代碼是好的:

myContactEvent.Contact = myContact; 

這段代碼也不錯:

myContact.ContactEvents.Add(myContactEvent); 
0

我有這個問題。究其原因,一個代碼啞行:

DBDataContext db { get { return new DBDataContext(); } } 

顯然應該是:

DBDataContext db = new DBDataContext();