我有一個這樣的倉庫:爲通用實體框架資源庫更新方法
public class Repository<T> : IRepository<T> where T : class
{
private readonly IRepositoryContext _repositoryContext;
public Repository(IRepositoryContext repositoryContext)
{
_repositoryContext = repositoryContext;
_objectSet = repositoryContext.GetObjectSet<T>();
}
public virtual void Update(T entity)
{
ObjectSet.AddObject(entity);
_repositoryContext.ObjectContext.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
_repositoryContext.SaveChanges();
}
}
現在的實際工作爲實體的所有標量的屬性,但都與實體typeOf(T)
,唐的性能相關的其他實體不關心實體狀態被修改,而EF只是添加新的數據。
因此,如果您舉例如Repository<Student>.Update()
,並且您只更改名稱,它會找到合適的學生並更改他的名字,但它也會更改校園,儘管您已經擁有與該學生相關的校園,它將用另一個CampusId再次創建。
請讓我看看在這種情況下更新的正確方法。
歡迎來到EF-Users-擁有痛苦與更新關係及相關實體的俱樂部。你可能不會爲'Update'方法找到* generic *解決方案。這是爲什麼EF中的通用存儲庫如此無用(主要原因可能是作爲內部幫助器)。 – Slauma
有[沒有正確的方法](http://stackoverflow.com/questions/3635071/update-relationships-when-saving-changes-of-ef4-poco-objects/3635326#3635326)。在這種情況下,簡單通用的方法不起作用。 –
好吧,你能告訴我,那麼我不直接與實體操作的情況非通用方法。相反,我通過AutoMapper將它們映射到ViewModel類 – Agzam