我正在使用LINQ to SQL和C#。我有两个LINQ类:用户和网络。
用户具有UserID(主键)和NetworkID
网络具有NetworkID(主键)和AdminID(用户ID)
以下代码可以正常使用:
user.Network.AdminID = 0;
db.SubmitChanges();
但是,如果我在进行更改之前访问AdminID,则更改永远不会发生在DB上。所以以下内容不起作用:
if(user.Network.AdminID == user.UserID)
{
user.Network.AdminID = 0;
db.SubmitChanges();
}
将它变成if语句并调用submit更改。出于某种原因,对AdminID的更改永远不会进入数据库。没有错误抛出,改变永远不会“花费”。
知道可能导致这种情况的原因吗?
感谢。
答案 0 :(得分:2)
我刚刚进行了快速测试,它对我来说很好。
我不想问这个问题,但你确定if语句会返回true吗?可能你只是没有点击改变价值的代码。
除此之外,我们可能需要更多信息。该成员的财产是什么?您是否已跟踪到set语句以确保在调用SubmitChanges之前设置了值?在SubmitChanges之后,Linq实体是否具有新值?或者数据库和Linq实体都无法获取新值?
简而言之,该代码应该可以工作......所以其他地方可能是错误的。
答案 1 :(得分: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的 setter 没有第二行。
所以,使用自动生成的实体...... 此代码产生意外行为:
myContactEvent.ContactID = myContact.ID;
这段代码很好:
myContactEvent.Contact = myContact;
此代码也很好:
myContact.ContactEvents.Add(myContactEvent);
答案 2 :(得分:0)
我有这个问题。原因是一行愚蠢的代码:
DBDataContext db { get { return new DBDataContext(); } }
显然它应该是:
DBDataContext db = new DBDataContext();