これまで、検索系をまったりと作りましたが、ここからは更新系の処理を.NET RIA Servicesで作ってみようと思います。
更新系の処理を出来るようにするためには、InsertXXX, UpdateXXX, DeleteXXXという名前で戻り値がvoid, 引数にエンテティを受け取るメソッドをDomainServiceクラスに作ればOKです。
using System.Linq; using System.Web.DomainServices; using System.Web.Ria; using System.Diagnostics; namespace CrudRIAServices.Web { [EnableClientAccess()] public class EmployeesDomainService : DomainService { public IQueryable<Employee> GetEmployees() { return EmployeesDataStore.GetEmployees(); } public void InsertEmployee(Employee emp) { Debug.WriteLine("Insert: " + emp); EmployeesDataStore.Insert(emp); } public void UpdateEmployee(Employee emp) { Debug.WriteLine("Update: " + emp); EmployeesDataStore.Update(emp); } public void DeleteEmployee(Employee emp) { Debug.WriteLine("Delete: " + emp); EmployeesDataStore.Delete(emp.ID); } } }
コード自体は、簡単です。
このように、登録更新削除のメソッドを追加すると、Silverlight側に自動生成されるコードが以下のように変わってきます。
// Update, Insert, Delete追加前に自動生成されたコード internal sealed class EmployeesDomainContextEntityContainer : EntityContainer { public EmployeesDomainContextEntityContainer() { this.CreateEntityList<Employee>(EntityListOperations.None); } }
// Update, Insert, Delete追加後に自動生成されたコード internal sealed class EmployeesDomainContextEntityContainer : EntityContainer { public EmployeesDomainContextEntityContainer() { this.CreateEntityList<Employee>(EntityListOperations.All); } }
DomainContextのEmployeesプロパティの実体であるEntityListを作っているであろう部分のコードがNoneからAllに変わっています。この引数は、EntityListに対して何の操作が出来るかを表すものです。
ためしに、Deleteメソッドを消すと
internal sealed class EmployeesDomainContextEntityContainer : EntityContainer { public EmployeesDomainContextEntityContainer() { this.CreateEntityList<Employee>((EntityListOperations.Add | EntityListOperations.Edit)); } }
こんな風に追加と更新が出来ることを表すAddとEditが引数に渡されるようになります。今回は、登録・更新・削除全てやるつもりなので、Insert Update Deleteメソッドを全てDomainServiceに追加しておきます。
次は、クライアント側を作っていきます。