我有一个基本控制器,它有一个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方法中处理不同的关键数据类型?
答案 0 :(得分:0)
向基类添加第二个类型参数,用于指定键的类型。
public class BaseController<TKey, TEntity> : ODataController
{
public TEntity Get([FromODataUri] TKey key)
{
return GetDbSet().Find(key);
}
}
当然,这种方法要求定义Find(TKey)
。