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();