entity-framework - EntityFramework 4、DbSet 和 ObjectContext

标签 entity-framework objectcontext

几天前,我阅读了有关 GenericRepository 和工作单元模式的教程 http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application .我使用 Web 表单并安装了 EntityFramework CTP4 包。 (我不能使用 EF 5)。

我想为我的项目编写通用存储库,但我被困在这一行:

this.dbSet = context.Set<TEntity>();

我知道这条线不起作用,因为在我的项目和数据库优先方法中使用了 ObjectContext。我该如何处理?我可以在不首先迁移到代码的情况下编写通用存储库吗(在我的情况下这不是一个选项)?

最佳答案

这是 ObjectContext 的等价物:

this.dbSet = context.CreateObjectSet<TEntity>();

现在这将创建一个 ObjectSet<TEntity>而不是 DbSet<TEntity> ,但是对于您的模式,您可以以相同的方式使用它。

更新
ObjectSet类没有与 Find() 匹配的实用方法。 DbSet 的方法.为了“按键获取”,您需要构造一个 EntityKey并使用 ObjectContext.GetEntityByKey() ,不幸的是,这并不是一件非常简单的事情。

我发现确实没有一种简单的方法可以解决这个问题。就我而言,我所做的是将所有实体都基于一个公共(public)类(使用自定义 T4 模板从模型生成类)。然后我可以向我的存储库添加一个通用约束,例如:
public class MyRepository<TEntity> where TEntity : MyEntityBaseClass

然后我的通用基类有一个 Id由所有实体继承的字段,因此我可以简单地执行以下操作:
return myObjectSet.SingleOrDefault(x => x.Id == myId);

我敢肯定还有其他方法,这可能是另一个问题的好话题。

关于entity-framework - EntityFramework 4、DbSet 和 ObjectContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9822648/

相关文章:

c# - 如何提高性能 EF Linq to Entities

c# - Entity Framework 返回 "$ref"项

mysql - 当id自动生成时,如何使用 Entity Framework 核心插入数据?

C#过滤对象集合

c# - 如何在单个事务下获得两个工作单元

c# - 如何正确实现其他实体对身份用户的引用?

asp.net-mvc - ASP.NET MVC 中的 Entity Framework 和对象上下文生存期

wpf - Entity Framework - 从数据库刷新对象

c# - EF不会在SaveChanges上更新相关实体

c# - 如何将 EF Code First DbContext 绑定(bind)到 Asp.Net 数据源?