OData的Delta和类型参数

时间:2014-10-31 13:34:38

标签: c# odata asp.net-web-api

我正在使用最新的OData包。

我有这个抽象类:

public abstract class EntityODataController<TEntity, TDto> : BaseODataController
{
    public EntityODataController(ILogService logService) : base(logService) { }

    [HttpGet]
    public abstract IHttpActionResult Get(int id);

    [AcceptVerbs("PATCH", "MERGE")]
    public abstract Task<IHttpActionResult> Update([FromODataUri] int id, Delta<TDto> delta, CancellationToken ct);
}

编译时出现以下错误:

  

类型'TDto'必须是引用类型才能在泛型类型或方法'System.Web.Http.OData.Delta'中将其用作参数'TEntityType'

我在项目中引用了System.Web.Http.ODataSystem.Web.OData(在安装软件包时已包含它们)。

在课堂上,我首先使用了一个命名空间,然后是另一个。但我仍然得到错误。

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

您的引用不存在问题TDto可以是任何类型,您需要向TDto添加通用类型限制以限制它引用类型。

public abstract class EntityODataController<TEntity, TDto> : ODataController where TDto : class
{
    public EntityODataController(ILogService logService) : base(logService) { }

    [HttpGet]
    public abstract IHttpActionResult Get(int id);

    [AcceptVerbs("PATCH", "MERGE")]
    public abstract Task<IHttpActionResult> Update([FromODataUri] int id, Delta<TDto> delta, CancellationToken ct);
}