我正在阅读一本关于ASP.NET MVC的书,其中作者提到由于ASP.NET MVC的无状态特性,实体框架中的一些功能被禁用。
考虑到这一点,最好抽象出数据访问层。存储库模式是用于管理数据抽象的最常用模式之一。
我很想知道,如果Repository模式不用于数据抽象,那么EF的哪些功能将被禁用。
答案 0 :(得分:2)
我正在阅读相同的考试70-486书。 实体框架不能为整个用户会话提供DbContextObject(旧的ObjectContext)对象,这意味着实体框架无法跟踪Web应用程序中实体对象的更改 。 解决方案是每次我们需要对数据库进行一些操作时创建一个新的DbContextObject对象。
但是,当我们需要使用新的DbContextObject实例删除或更新记录时,此解决方案会导致一个问题。第一个解决方案是首先检索您尝试修改的对象,然后才进行必要的更改。另一种解决方案是将实体状态标记为已修改( context.Entry(entity).State = EntityState.Modified; ),无需先检索实体
答案 1 :(得分:0)
特别是,实体跟踪不是很有用,因为每个请求都有新的对象实例。更新的解决方法是:
var entity = new Entity();
entity.Id = id;
content.Entry(entity).State = EntityState.Modified;
context.SaveChanges();