本文介绍了使用资源库模式实现WCF数据服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们在ASP.NET MVC 3应用程序中使用了存储库模式。这意味着,虽然我们使用EF 4.1 Code First来访问后端的数据,但所有的MVC控制器都是通过通用存储库类而不是直接通过DbContext子类实现的。



简化的代码片段:

  public class MyEntityContext:DbContext,IMyEntityContext 
{
public IDbSet MyEntities {得到;组;
...
}

public class MyEntityRepository:IMyEntityRepository
{
private IMyEntityContext _context;

public IQueryable&MyEntity> MyEntities
{
return _context.MyEntities;
}
...
}

public class MyEntityController:Controller
{
private MyEntityRepository _repository;
...
}

我们为每个依赖关系使用接口和依赖注入。工作正常看起来不错,不是吗?但现在要提醒:



我们还提供一个WCF数据服务(CTP支持代码优先)来访问实体。我们也想在该服务中使用存储库。但这似乎很棘手。直接使用 MyEntityContext 时,服务如下所示:

  public MyEntityService类:DataService&MyEntityContext> 
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule(MyEntities,EntitySetRights.All);
}
}

但是当我尝试替换 MyEntityContext 存储库有两个问题:


  1. 为通用 DataService< ..> 需要一个默认构造函数的类,它打破了美丽的按合同设计和依赖注入设计。

  2. 甚至似乎提供的类型必须是一个 DbContext 类:我尝试并使用了 MyEntityRepository ,但是失败(见详情)

我似乎迷路了吗?有人可以带我回到正确的轨道吗?






详细信息:



我的第一步是:

  public class MyEntityService:DataService&MyEntityRepository> 
{
...

但是,当调用服务时,它失败并出现以下错误消息:

我尝试了以下步骤来解决这个问题,但没有摆脱这个错误信息:




  • 添加一个 DataServiceKey(MyEntityId)] 到MyEntity,其中MyEntityId 是实体的正确键属性。

  • 替换类型 Repository.MyEntities by IDbSet 而不是 IQueryable li>





BTW:以下帖子是 / strong>重复:



10-28 03:33