Web API 2 Odata 4 参数问题
Web API 2 Odata 4 Parameter Issue
我在为 odata4 定义函数时遇到问题。默认的 get 可以工作,但我想需要一个用户参数,以便可以确定客户端集,涉及其他 table,因此需要 LINQ,我还 return 一个 DTO 而不是默认的 table 信息 (EF)。下面是代码。我收到 "Invalid EntitySetPath detected. 'bindingParameter/Client' is not a valid entity set path for procedure 'Default.GetClients'." 我做错了什么?
WebApiConfig
public static void Register(HttpConfiguration config)
{
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<client>("Client").EntityType.HasKey(p => p.int_id);
var function = builder.Function("GetClients");
function.Parameter<string>("user");
function.ReturnsCollectionFromEntitySet<client>("Client");
builder.EntitySet<ClientDTO>("ClientDTO");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: null,
model: builder.GetEdmModel());
WebApp.Controller
[ODataRoute("GetClients(user={user})")]
[EnableQuery(PageSize=25)]
public IQueryable<ClientDTO> GetClients([FromODataUri] string user)
{
var clients = (from c in db.clients
join ...
如果您的 OData 控制器正在 returning DTO,函数应如下所示:
var function = builder.Function("GetClients");
function.Parameter<string>("user");
function.ReturnsCollectionFromEntitySet<ClientDTO>("Client");
根据您当前的设置,GetClients 的 OData 路由表示它正在 returning 一个 ClientDTO
对象,但是您的 WebApiConfig 表明您正在 returning 一个 [=12] =]对象。
因为实体集合被 returned 实际上是 DTO。显示 ("Client")
的部分只是 OData 服务如何将对象的名称报告给使用 OData 服务的项目。为了我个人的理智,我通常也会包括 DTO,这样我就知道什么时候使用 DTO 以及什么时候使用直接实体。所以在我自己的设置中,我会 return ("ClientDTO")
,这只是个人喜好。
我在为 odata4 定义函数时遇到问题。默认的 get 可以工作,但我想需要一个用户参数,以便可以确定客户端集,涉及其他 table,因此需要 LINQ,我还 return 一个 DTO 而不是默认的 table 信息 (EF)。下面是代码。我收到 "Invalid EntitySetPath detected. 'bindingParameter/Client' is not a valid entity set path for procedure 'Default.GetClients'." 我做错了什么?
WebApiConfig
public static void Register(HttpConfiguration config)
{
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<client>("Client").EntityType.HasKey(p => p.int_id);
var function = builder.Function("GetClients");
function.Parameter<string>("user");
function.ReturnsCollectionFromEntitySet<client>("Client");
builder.EntitySet<ClientDTO>("ClientDTO");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: null,
model: builder.GetEdmModel());
WebApp.Controller
[ODataRoute("GetClients(user={user})")]
[EnableQuery(PageSize=25)]
public IQueryable<ClientDTO> GetClients([FromODataUri] string user)
{
var clients = (from c in db.clients
join ...
如果您的 OData 控制器正在 returning DTO,函数应如下所示:
var function = builder.Function("GetClients");
function.Parameter<string>("user");
function.ReturnsCollectionFromEntitySet<ClientDTO>("Client");
根据您当前的设置,GetClients 的 OData 路由表示它正在 returning 一个 ClientDTO
对象,但是您的 WebApiConfig 表明您正在 returning 一个 [=12] =]对象。
因为实体集合被 returned 实际上是 DTO。显示 ("Client")
的部分只是 OData 服务如何将对象的名称报告给使用 OData 服务的项目。为了我个人的理智,我通常也会包括 DTO,这样我就知道什么时候使用 DTO 以及什么时候使用直接实体。所以在我自己的设置中,我会 return ("ClientDTO")
,这只是个人喜好。