0

我正在使用 C#使用 OData 生成无类型自定义数据服务提供程序
实现了所有必需的提供程序和接口。
所有实体将仅在元数据创建期间动态指定。
不能使用 EDMX 或反射提供程序。
提供所有访问权限。

1) 自定义元数据提供者

public bool TryResolveResourceType(string name, out ResourceType resourceType)  
{  
    return this.resourceTypes.TryGetValue(name, out resourceType);  
}
public bool TryResolveServiceOperation(string name, out ServiceOperation serviceOperation)  
{
    if (serviceOperations.TryGetValue(name, out serviceOperation))
    {
        serviceOperation.SetReadOnly();
        return true;
    }
    else
    {
        serviceOperation = null;
        return false;
    }            
}

2) 自定义数据查询提供者

public object InvokeServiceOperation(ServiceOperation serviceOperation, object[] parameters)
{
//Invoke the method present in ServiceOperation
}

当我给出以下 url
http://localhost/SampleService.svc/TestEntity(1)/Id>
我能够获取 id 值。

当我使用 url
http://localhost/SampleService.svc/TestServiceOperation
调用服务时,我可以调用服务操作。

但是当我尝试调用 Serv.Op 时。指定实体后,我收到错误
http://localhost/SampleService.svc/TestEntity/TestServiceOperation

当我使用这个 url 时,它会找到相应的 TestEntityResourceSet,
然后去查找 name=TestServiceOperation 的资源类型。
但是 TestServiceOperation 没有资源类型。需要在 TryResolveServiceOperation 中搜索对应的 SO 名称。

在网上搜索的所有示例都像调用 Ser.Op。仅在 .svc/SO 类型之后。
我需要为每个实体单独调用服务操作。喜欢

http://localhostTest.svc/Entity1/SerOp1 http://localhostTest.svc/Entity2/SerOp2

如何做到这一点的任何好例子?谢谢。

4

1 回答 1

0

似乎您正在寻找绑定在 EntityType 上的操作。见10.4.1。有关详细信息,请参阅OData V3.0 协议中的操作

于 2014-02-21T08:56:40.667 回答