かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

更新系の処理を作ってみよう サーバー編

これまで、検索系をまったりと作りましたが、ここからは更新系の処理を.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に追加しておきます。

次は、クライアント側を作っていきます。