2008-09-30 138 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();