Reference na objekty v ADO.NET Data Services
|
Pokud se rozhodnete pro vaše AJAXové aplikace požívat RESTové služby ADO.NET Data Services, jistě se dostanete do situace, kdy máte komplexní typ a potřebujete vytvořit novou entitu s odkazem na již existující objekt.
Řešení tohoto problému jsem hledal dost dlouho, nakonec bylo celkem jednoduché.
Problém
AJAXově vytvářím entitu, která má vlastnost User
, což je reference na uživatele, který danou entitu vytvořil – kterému patří.
Cesta k řešení
Nejprve jsem zkoušel využít něco podobného, jako je u entit, které jsou vráceny pomocí metody GET. Tedy odkaz na jinou entitu je vyjádřen pomocí vlastnosi __deffered
a ta má atribut uri
, který odkazuje na již existující entitu pomocí jejího URL. Bohužel, to nefungovalo, protože __deffered
je metodou POST ignorováno. Kód vypadal asi následujícně:
User: { __deffered: { uri: "/Users(13)" } }
Pak jsem tedy zkusil druhý zoufalý krok. Zkusil jsem použít atribut ID, který je vlastně jediný důležitý pro správné persistování do databáze. Kód následující:
User: { Id: 13 }
Jenže ani to není správná cesta, navíc si tak můžete Usera poškodit.
Konečné řešení
Konečné funkční řešení se od toho původního pokusu skoro neliší, ano byl jsem hodně blízko a vzal to oklikou a až důkladné čtení dokumentace mi otevřelo oči. Vlastnost __metadata
byla aktuálně tou správkou, která se měla použít! Takže správný kód vypadá takto:
User: { __metadata: { uri: "/Users(13)" } }
Závěr
Já vím, není to žádná super extra informace, ale já k jejímu získání spotřeboval celkem dost času. Možná to někomu ušetří starosti a hledání… Pokud vás zajímají ADO.NET Data Services – což je velice zajímavá technologie – můžete se přijít podívat na naši přednášku o ASP.NET, kde o nich bude utroušeno několik slov a předvedena pěkná ukázka ve spojení s AJAXem a k databázi budeme přistupovat přes NHibernate místo Entity Frameworku.
Tagy: DataServices, AJAX