ADO.NET Data Services できるやん・・。

DataSvcUtil.exe を使わなアカンと思ってたんやけど、自動生成できますやん。いつから出来てたんやこれ??


サービス作るところは省略します。こことか参照してください。


サービス参照ですが、 WCF とかと同じように普通にサービス参照を追加するのみです。


そうするとこんな感じでクライアントコードが自動生成されます。


で、使います。

NorthwindEntities context = new NorthwindEntities(
  new Uri("http://localhost:56378/Northwind.svc",UriKind.Absolute));
DataServiceQuery<Customers> query = context.CreateQuery<Customers>("Customers");
query = query.AddQueryOption("$filter","Country eq 'Mexico'");
query.BeginExecute(result =>
{
  IEnumerable<Customers> customers = query.EndExecute(result);
  dataGrid.ItemsSource = customers.ToArray();
},null);


結果はこんな感じ。


注意点としては以下の2点。

  1. クエリは AddQueryOption で追加してあげる必要がある。
  2. DataGrid の ItemSource への設定は、ToArray なり ToList なり何なりで詰め替える必要がある。


CreateQuery の引数で filter とかを指定すると怒られました。

DataServiceQuery<Customers> query = context.CreateQuery<Customers>("Customers?$filter=Country eq 'Mexico'");
//query = query.AddQueryOption("$filter", "Country eq 'Mexico'");


DataGrid の ItemSource に結果をそのまま設定しても怒られました。ListBox では大丈夫だったんで DataGrid の実装がなにか違うのかもしれません。

dataGrid.ItemsSource = query.EndExecute(result);
//IEnumerable<Customers> customers = query.EndExecute(result);
//dataGrid.ItemsSource = customers.ToArray();


掲載したコードしか試してないので、まだ落とし穴はあるかも知れませんがいい感じです。
さて、次は更新を試してみないと。