我正在使用LINQ来SQL和C#。 我有两个 LINQ 类:用户和网络。
用户具有用户 ID(主键)和网络 ID
网络具有网络 ID(主键)和管理员 ID(用户 ID)
以下代码工作正常:
user.Network.AdminID = 0;
db.SubmitChanges();
但是,如果我在进行更改之前访问 AdminID,则更改永远不会发生在数据库中。 因此,以下方法不起作用:
if(user.Network.AdminID == user.UserID)
{
user.Network.AdminID = 0;
db.SubmitChanges();
}
它正在将其放入 if 语句并调用提交更改。 出于某种原因,对 AdminID 的更改永远不会进入数据库。 没有抛出错误,更改永远不会"采取"。
知道是什么原因造成的吗?
谢谢。
我刚刚进行了快速测试,它对我来说效果很好。
我不想问这个,但你确定 if 语句返回为真吗? 可能是您只是没有点击更改值的代码。
除此之外,我们可能需要更多信息。 该成员的属性是什么? 您是否跟踪了 set 语句以确保在调用 SubmitChanges 之前设置了该值? Linq 实体在提交更改之后是否具有新值? 还是数据库和 Linq 实体都无法采用新值?
简而言之,该代码应该可以工作...所以某处的其他事情可能是错误的。
这是原始帖子。
下面是由 LinqToSql 设计器生成的资源库。
代码片段
{
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);
我遇到了这个问题。原因是一行愚蠢的代码:
DBDataContext db { get { return new DBDataContext(); } }
显然应该是:
DBDataContext db = new DBDataContext();