通用实体框架存储库的更新方法
我有一个这样的存储库:
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
操作,并且您只更改了名称,它会找到正确的学生并更改他的名称,但它也会更改 Campus,尽管您已经有一个与该学生关联的校园,它将使用不同的 CampusId 再次创建。
请告诉我在这种情况下进行更新的正确方法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当我想遵循通用方法时,我所做的被翻译成您的代码,例如:
我所有的代码都像这样工作:
=>以通用方式执行此操作会将大量逻辑移至上层。没有更好的方法来保存大的分离对象图(特别是当涉及多对多关系并且涉及删除关系时)。
What I did when I wanted to follow generic approach was translated to your code something like:
All my code then worked like:
=> Doing this in generic way moves a lot of logic into your upper layer. There is no better way how to save big detached object graphs (especially when many-to-many relations are involved and deleting of relations is involved).