TechEdフォロー(T2-405:ADO.NET Entity Framework Part2)
引き続きセッションフォローです。
シナリオ2.~ より素早く、より効率よく を 考えてみる ~
汎用性を多少犠牲にしても開発効率をあげる方向性で考えてみます。
ここでは、EFに加えてADO.NET Data Servicesと.NET RIA Serviceを使用します。
どちらも、N層の開発を簡素化することが大きなメリットになっています。
今回、DataServicesについては、Astoria Offlineをご紹介しました。
こちらに関しては、以前ご紹介しています。
https://blogs.msdn.com/tarok/archive/2009/01/30/9384583.aspx
(現在AlphaPreviewなのですが、コードなどに全く相違はありません。)
セッションのビデオも公開されています。https://www.microsoft.com/japan/powerpro/techdays/searchresult.aspx?SessionID=T3-305
特にAstoria Offlineは、オフライン対応が目的なのですが、簡易N層アプリケーション開発を可能にするテクノロジーとしての側面も十分に備えています。クライアントにあるデータソースは、クライアントのデータ操作をトラックして、あたかもUnit of Workのように働くことが可能です。開発においても、データ操作はクライアントのみで考えればよいため非常に明快です。
例えば、今回のデモではExcelをクライアントとして使用したのですが、データの取得は以下のように行いました。
ExcelWorkbook1.ExpensesDbEntities db; public void LoadData() { db = new ExcelWorkbook1.ExpensesDbEntities(); var query = from ex in db.Expense orderby ex.CreatedDate descending select ex; Globals.Sheet1.expenseBindingSource.DataSource = query; } |
上記の変数dbはクライアントにあるEDMに対してのDataContextになります。
さらに保存処理は以下になります。
private void button2_Click(object sender, RibbonControlEventArgs e) { //保存ボタン押下 db.SaveChanges(); } |
これだけですが、データの追加、更新、削除を賄います。
Excelですので、データの記述自体も非常に単純です(コピーペーストが可能)
そして、同期処理は今回リボンのボタンに実装しましたが、以下のようになります。
private void button1_Click(object sender, RibbonControlEventArgs e) { //同期ボタン押下 var dsp = new DataServiceSyncProvider( new Uri("https://localhost:8076/Expenses.svc"), "global"); var esp = new ObjectContextSyncProvider( () => new ExcelWorkbook1.ExpensesDbEntities()); var so = new SyncOrchestrator(); so.RemoteProvider = dsp; so.LocalProvider = esp; so.Direction = SyncDirectionOrder.UploadAndDownload; try { so.Synchronize(); System.Windows.Forms.MessageBox.Show("同期完了!"); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } LoadData(); } |
デモファイルをこちらに置いておきます。
DB作成のスクリプトも同梱していますが、接続文字だけ確認してください。
Astoria Offlineについては以下から入手できます。https://blogs.msdn.com/tarok/archive/2009/03/10/9468628.aspx
長くなってきましたので、.NET RIA Serviceについては別の機会にご紹介したいと思います。