Выполняя свое первое приложение на базе SL4 MVVM RIA, я столкнулся со следующей ситуацией:
обновление записи (EF4, NO-POCOS !!) в SL-клиенте, по-видимому, имеет место, но значения в dbms неизменны. Отладка с Fiddler сообщение о сохранении (среди прочего):
EntityActions.nil b9 http://schemas.microsoft.com/2003/10/Serialization/Arrays^HasMemberChanges�^Id�^ Операция Обновление
Я предполагаю, что это говорит только: эй! DBMS должен сделать обновление этой записи, и ничего больше! Это правильно?!
Я использую общий репозиторий, подобный этому:
public class Repository<T> : IRepository<T> where T : class
{
IObjectSet<T> _objectSet;
IObjectContext _objectContext;
public Repository(IObjectContext objectContext)
{
this._objectContext = objectContext;
_objectSet = objectContext.CreateObjectSet<T>();
}
public IQueryable<T> AsQueryable()
{
return _objectSet;
}
public IEnumerable<T> GetAll()
{
return _objectSet.ToList();
}
public IEnumerable<T> Find(Expression<Func<T, bool>> where)
{
return _objectSet.Where(where);
}
public T Single(Expression<Func<T, bool>> where)
{
return _objectSet.Single(where);
}
public T First(Expression<Func<T, bool>> where)
{
return _objectSet.First(where);
}
public void Delete(T entity)
{
_objectSet.DeleteObject(entity);
}
public void Add(T entity)
{
_objectSet.AddObject(entity);
}
public void Attach(T entity)
{
_objectSet.Attach(entity);
}
public void Save()
{
_objectContext.SaveChanges();
}
}
Метод обновления DomainService является следующим:
[Update]
public void UpdateCulture(Culture currentCulture)
{
if (currentCulture.EntityState == System.Data.EntityState.Detached)
{
this.cultureRepository.Attach(currentCulture);
}
this.cultureRepository.Save();
}
Я знаю, что текущий объект-культура отключен. Что меня смущает (среди прочего) это: _objectContext еще жив? (что означает, что он «будет» осведомлен об изменениях, внесенных в запись, поэтому достаточно просто вызвать Attach () и затем Save ()!?!?)
Что мне не хватает?
Среда разработки: VS2010RC - Entity Framework 4 (без POCO)
Заранее спасибо