如何通过网格更新数据库

时间:2014-02-03 19:51:40

标签: wpf entity-framework

我有一个View模型和一个绑定到VM上“Items”属性的网格。 Items只是我创建的POCO模型列表。这些POCO模型充当底层EF域模型的包装器。当我创建一个新行并将其添加到带有网格的数据库时,它可以正常工作:

 public virtual void Add(params T[] items)
    {
        using (var context = new Entities())
        {
            foreach (T item in items)
            {
                context.Entry(item).State = System.Data.EntityState.Added;
            }

            context.SaveChanges();
        }
    }

但是当我对一行进行更改并按Enter键时,我收到以下异常:

  

其他信息:存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目。

这是我的更新功能:

  public virtual void Update(params T[] items)
    {
        using (var db = new Entities())
        {

            foreach (T item in items)
            { 
                db.Entry(item).State = System.Data.EntityState.Modified; 
            }
            var context = ((IObjectContextAdapter)db).ObjectContext;
            try
            {
                context.SaveChanges();
            }
            catch (OptimisticConcurrencyException)
            {
                context.Refresh(RefreshMode.ClientWins, db.FREQ_POOL);
                context.Refresh(RefreshMode.ClientWins, db.FREQUENCIES);
                context.SaveChanges();
            }

            context.SaveChanges();

        }
    }

我在创建VM时创建这些模型包装类。模型包装器将我的实体的其他导航属性中的属性拉在一起,并将其放在一个很好的模型类中,因此包装器)。如何使用我当前的设置正确更新实体?我不知道怎么做。如果我绑定到实体模型而不是模型包装器,更新工作正常,但我不知道这是否是更好的事情。

0 个答案:

没有答案