OData aplicado a ASP.NET Core WebApi 3.1 utilizando Entity Framework Core. 📇 📋 📂
📚 𝖮𝖣𝖺𝗍𝖺 + 𝖤𝗇𝗍𝗂𝗍𝗒 𝖥𝗋𝖺𝗆𝖾𝗐𝗈𝗋𝗄 + 𝖠𝖲𝖯.𝖭𝖤𝖳 𝖢𝗈𝗋𝖾 𝖶𝖾𝖻𝖠𝗉𝗂 𝟥.𝟣 📝🔎
- SQL Server Developer Edition
- SQL Server Management Studio
- Visual Studio 2019 Community
- .net Core 3.1
- PostMan
- Extension para Visual Studio
- Cliente OData con HttpClient: https://docs.microsoft.com/es-es/odata/client/using-httpclient
Cliente de ejemplo utilizando HttpClient
WebApi con OData
<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>
- Microsoft.AspNetCore.OData
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Design
- Microsoft.VisualStudio.Web.CodeGeneration.Design
# Para instalar la herramienta dotnet-ef
dotnet tool install --global dotnet-ef
# Para generar la base de datos
dotnet-ef migrations add Initial
dotnet-ef database update
- http://localhost:5000/odata/personas?$select=NombreYApellido
- http://localhost:5000/odata/personas?$filter=Id eq 1
- http://localhost:5000/odata/personas?$expand=Telefono,Direccion
- http://localhost:5000/odata/personas?$expand=telefono,direccion&$filter=Id eq 1
- http://localhost:5000/api/personasapi?$expand=telefono,direccion&$filter=Id eq 2
{
"NombreYApellido": "Luciano",
"Edad": 23,
"Telefonos": [
{
"TelefonoDesc": "+528885555444"
},
{
"TelefonoDesc": "+551234567890"
}],
"Direcciones": [
{
"DireccionDesc": "Calle 23"
}]
}
NombreYApellido: Nueva Persona
Edad: 23
Telefono[0].TelefonoDesc: +545555444477
Telefono[1].TelefonoDesc: +559879879879
Direccion[0].DireccionDesc: Avenida 293 #445
SELECT per.Id, per.NombreYApellido, per.Edad,
Telefonos = STUFF((SELECT ' || ' + tel.TelefonoDesc
FROM Telefonos tel
WHERE tel.IdPersona = per.id
FOR XML PATH('')), 1, 2, ''),
Direcciones = STUFF((SELECT ' || ' + dir.DireccionDesc
FROM Direcciones dir
WHERE dir.IdPersona = per.id
FOR XML PATH('')), 1, 2, '')
FROM Personas per
- Ejemplos OData: https://github.com/OData/ODataSamples
- URL OData: http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_URLComponents