繁体   English   中英

无法从基本控制器(Odata WebAPI)访问具有int密钥的实体

[英]Cannot access entity having int key from base controller (Odata WebAPI)

我有一个基本控制器,它具有以下Get方法:

[Enable query]   
public T Get([FromOdataURI]string key)  
{  
  entity=GetDbSet().Find(key);  
}  

我无法修改find​​方法。 它是一种从元数据文件派生的方法。

问题在于Get方法接受键作为字符串。 因此,如果访问具有字符串主键的实体,

例如: http:// hostname / service-name / employee ('3000200')(此处的“ 3000200”在数据库中为nvarchar类型),

调用基本控制器,并且在基本控制器中定义的get方法将字符串主键与数据库中的字符串值进行比较。

但另一方面,如果访问具有整数键的实体,

例如: http:// hostname / service-name / product(2) (此处2在数据库中为整数类型),

基本控制器被调用,并且Get方法仍将键作为字符串,并且当代码将字符串键值与数据库中的整数键值进行比较时,它抛出一条错误,指出“参数类型Edm.String和Edm.Int不兼容” 。 我不想为没有主键作为字符串的实体创建单独的控制器。 如何在基本控制器的Get方法中处理不同的关键数据类型?

在基类中添加第二个type参数,以指定键的类型。

public class BaseController<TKey, TEntity> : ODataController
{
    public TEntity Get([FromODataUri] TKey key) 
    {
        return GetDbSet().Find(key);
    }
}

当然,此方法要求定义Find(TKey)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM