为什么每次我尝试保存更改时,我的实体都会抛出异常?

时间:2015-10-23 13:26:15

标签: c# entity-framework wcf

我有一个网络服务,通过AJAX提供信息,然后我的服务根据他们改变的内容更新当前用户的数据

我的问题是,当我根据以下消息致电SaveChanges时,我的实体不断抛出异常;

  

EntityFramework.dll中发生了'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException'类型的异常,但未在用户代码中处理

     

其他信息:存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。有关理解和处理乐观并发异常的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=472540

我已启用乐观并发,我最初还认为这不是设置经销商ID,这是我的数据库的主键,但是经销商ID很好,所以我看不出我出错的地方。

我已经能够更新用户信息而不首先显示信息,所以我认为这个问题与使用相同的实体显示数据以及更新数据有关,但我不太确定

我的代码在下面,

class Dashboards
{
        //this is my EF Model
        dealer DealerObj = new dealer();
   public void UpdateDealerInfo(string UserName, DealerInfoViewModel model)
        {
            using (var context = new VatsWebDealerEntity())
            {
                var UserInfo = context.dealers.AsNoTracking().Where(m => m.Name == UserName).Select(m => m).ToArray();
                var UserID = context.dealers.AsNoTracking().Where(m => m.Name == UserName).Select(m => m.DealerID).FirstOrDefault();

               //DealerObj.DealerID = UserID;

                foreach (var item in UserInfo)
                {
                    if (item.Name != model.NewValue)
                    {
                        DealerObj.Name = model.NewValue;
                    }
                    else if (item.Address1 != model.NewValue)
                    {
                        DealerObj.Address1 = model.NewValue;
                    }
                    else if (item.Address2 != model.NewValue)
                    {
                        DealerObj.Address2 = model.NewValue;
                    }
                    else if (item.Address3 != model.NewValue)
                    {
                        DealerObj.Address3 = model.NewValue;
                    }
                    else if (item.PostCode != model.NewValue)
                    {
                        DealerObj.PostCode = model.NewValue;
                    }
                    else if (item.Town != model.NewValue)
                    {
                        DealerObj.Town = model.NewValue;
                    }
                    //else if (item.CountryID != model.NewValue)
                    //{
                    //    DealerObj.country = model.NewValue;
                    //}
                    else if (item.ContactName != model.NewValue)
                    {
                        DealerObj.ContactName = model.NewValue;
                    }
                    else if (item.ContactTelephone != model.NewValue)
                    {

                        DealerObj.ContactTelephone = model.NewValue;
                    }
                    else if (item.Phone != model.NewValue)
                    {
                        DealerObj.Phone = model.NewValue;
                    }

                        DealerObj.DealerID = UserID;
                        DealerObj.CountryID = 1;
                        var entry = context.Entry(DealerObj);
                        context.dealers.Attach(DealerObj);

                    //context.Entry(DealerObj).Property(e => e.DealerID).IsModified = false;

                    context.Entry(DealerObj).State = System.Data.Entity.EntityState.Modified;
                    //entry.State = System.Data.Entity.EntityState.Modified;
                    context.SaveChanges();
                }
            }
        }
}

1 个答案:

答案 0 :(得分:0)

我还没有对其进行测试,但请在context.SaveChanges()循环之外试用foreach