【发布时间】:2010-03-22 10:10:55
【问题描述】:
做我的第一个基于 SL4 MVVM RIA 的应用程序,我遇到了以下情况: 似乎更新了 SL 客户端中的记录(EF4,NO-POCOS !!),但 dbms 中的值没有改变。使用 Fiddler 调试保存时的消息是(其中包括):
EntityActions.nil. b9http://schemas.microsoft.com/2003/10/Serialization/Arrays^HasMemberChanges.^Id.^ Operation.Update
我假设这只是说:嘿! 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();
}
我知道 currentCulture-Entity 是分离的。让我(除其他外)感到困惑的是:_objectContext 还活着吗? (这意味着它“将”???知道对记录所做的更改,因此只需调用 Attach() 然后 Save() 就足够了!?!?)
我错过了什么?
开发环境:VS2010RC - Entity Framework 4(无 POCO)
提前致谢
【问题讨论】:
-
我还想在我的 SL 客户端中创建一个通用存储库。你能给我举个例子吗? IObjectContext 接口代表什么?我知道 DomainContext 没有实现 IObjectContext 等,你能提供一些学习资源吗?谢谢。
标签: entity-framework repository wcf-ria-services