LINQ提交更改不提交更改
时间:2020-03-06 14:57:10 来源:igfitidea点击:
我正在使用LINQ to SQL和C#。我有两个LINQ类:用户和网络。
用户具有UserID(主键)和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的更改永远不会使它进入数据库。没有抛出任何错误,更改永远不会"冒"。
知道是什么原因造成的吗?
谢谢。
解决方案
我只是进行了快速测试,对我来说效果很好。
我不想问这个问题,但是我们确定if语句曾经返回true吗?可能是我们只是没有点击更改值的代码。
除此之外,我们可能需要更多信息。该成员的属性是什么?我们是否在调用SubmitChanges之前跟踪了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();