gee*_*eek 5 entity-framework objectcontext
几天前,我阅读了关于GenericRepository和Unit Of Work模式的教程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>();
Run Code Online (Sandbox Code Playgroud)
我知道这行不起作用,因为在我的项目和数据库中首先使用ObjectContext.我怎么处理它?我可以编写通用存储库而无需先迁移到代码(在我的情况下这不是一个选项)吗?
这与ObjectContext相同:
this.dbSet = context.CreateObjectSet<TEntity>();
Run Code Online (Sandbox Code Playgroud)
现在这创建了一个ObjectSet<TEntity>
而不是一个DbSet<TEntity>
,但对于您的模式,您可以以相同的方式使用它.
UPDATE
该ObjectSet
班没有一个实用程序方法一样,比赛Find()
的方法DbSet
.为了"按键获取",你需要构建一个EntityKey
并使用它ObjectContext.GetEntityByKey()
,遗憾的是,这并不是一件非常简单的事情.
我发现,确实没有一种简单的方法可以解决这个问题.在我的例子中,我所做的是将所有实体建立在公共类的基础上(使用自定义T4模板从模型中生成类).然后我可以在我的存储库中添加一个通用约束,例如:
public class MyRepository<TEntity> where TEntity : MyEntityBaseClass
Run Code Online (Sandbox Code Playgroud)
然后我的公共基类有一个Id
由所有实体继承的字段,所以我可以简单地做:
return myObjectSet.SingleOrDefault(x => x.Id == myId);
Run Code Online (Sandbox Code Playgroud)
我确信还有其他方法,这可能是另一个问题的好主题.
归档时间: |
|
查看次数: |
7472 次 |
最近记录: |