2016-12-01 1 views
0

У меня проблема с использованием моей службы OData V4 в ASP.NET при использовании целых ключей. Я не использую Entity Framework, так как получаю данные из службы SOAP.Почему мой идентификатор OData V4 не работает на моем ASP.NET-сервере?

Вот мой класс данных:

public class RecipeDto 
{ 
    public RecipeDto(); 
    public RecipeDto(string name); 
    public RecipeDto(int ident); 

    public string Description { get; set; } 
    public int Ident { get; set; } 
    public string Name { get; set; } 
    public List<RecipeVersionDto> Versions { get; set; } 
} 

И я поставил свой ключ с помощью текучего API:

var rtdto = builder.EntitySet<RecipeTemplateDto>("AgentConfigTemplates").EntityType 
       .HasKey(r => r.Ident) 
       .HasMany(r => r.Versions); 

Вот мои метаданные на моей службе:

<EntityType Name="RecipeTemplateDto"> 
<Key> 
<PropertyRef Name="Ident"/> 
</Key> 
<Property Name="Ident" Type="Edm.Int32" Nullable="false"/> 
<Property Name="Description" Type="Edm.String"/> 
<Property Name="Name" Type="Edm.String"/> 
<NavigationProperty Name="Versions" Type="Collection(Ifmdatalink.Linerecorder.Backend.PlugIn.dto.RecipeTemplateVersionDto)"/> 
</EntityType> 

Теперь я будет ожидать получить первую запись моего объекта, заданного с помощью этого запроса:

GET http://localhost:13917/my.svc/AgentConfigTemplates(1) 

Но я всегда получаю полный список.

Почему это происходит и как я могу получить первую запись?

Должен ли я каким-то образом расширить мой контроллер odata?

Если я поставлю свой ключ в кавычки, я получаю плохой запрос.

ответ

0

Ответ не указан ни в модели, ни в свободном определении api. Это проблема контроллера. OData Контроллер должен реализовать два метода ПОЛУЧАЕТ:

public async Task<IQueryable<AgentVersionDto>> Get() 

public SingleResult<AgentDto> Get([FromODataUri] int key) 

Это охватывает получить для всего набора сущностей и для одной записи. Если последнее не реализовано, служба odata в webapi 2 всегда будет возвращать весь список.