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