---
title: "エンティティサービスを作成"
slug: "create-an-entityservice"
abstract: "ビジネスオブジェクトにアクセスするにはEntityServiceを使いましょう。"
---
# エンティティサービスを作成

カスタムビジネスオブジェクトとやり取りするためにEntityServiceを使用します。

> !注Sitecoreはビジネスオブジェクトを提供していません。EntityServiceのビジネスオブジェクトを実装するのはあなた次第ですが、EntityServiceの実装は必要なビジネスオブジェクトの実装を容易にする足場を提供します。

クライアント側のJavaScriptからEntityServiceを利用することも、RESTful APIを通じて利用できます。

このトピックでは、以下の方法を説明します:

-   [エンティティサービスを作成](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/create-an-entityservice.html#UUID-07eaaa6f-5e11-641b-c9d8-03fbdabf768d_id__Create_an_EntityService "Create an EntityService")
-   [ビジネスオブジェクトをSitecoreに保存する](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/create-an-entityservice.html#UUID-07eaaa6f-5e11-641b-c9d8-03fbdabf768d_N1525859044394)
-   [カスタムメソッドの追加](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/create-an-entityservice.html#UUID-07eaaa6f-5e11-641b-c9d8-03fbdabf768d_id__Add_custom_methods "Add a custom method")

## エンティティサービスを作成

エンティティサービスを作成するには:

1.  ビジネスオブジェクトを表すクラスを作成します。このクラスはSitecore.Services.Model.EntityIdentityから派生しなければなりません。必要な検証属性を追加します。
    
2.  ビジネスオブジェクトを永続化するためのクラスを作成しましょう。このクラスはSitecore.Services.Core.IRepository<T> インターフェースを実装しなければなりません。
    
3.  Sitecore.Services.Infrastructure.Sitecore.Services.EntityServiceBaseから派生したコントローラークラスを作成し、Tはステップ1で作成したビジネスオブジェクトタイプです。このクラスにはServicesController属性を付け、パラメータのないコンストラクタを持つ必要があります。
    
    この例はサービスコントローラの定義を示しています:
    
    ServicesController
    EnableCors(origins: "\*", headers: "\*", methods: "\*")
    public class ExampleController : EntityServiceBase<SimpleData>
    {
     public ExampleController(IRepository<SimpleData> entityRepository)
     : base(entityRepository)
     {
     }
     public ExampleController()
     : this(new ExampleRepository())
     {
     }
    }
    
    EnableCors属性は任意です。
    

## ビジネスオブジェクトをSitecoreに保存する

コントローラークラス(HTTP経由でビジネスオブジェクトをサーバーに届ける)とリポジトリクラス(ビジネスオブジェクトを格納するための永続性ロジックを実装)で懸念を分けることができます。

> !注リポジトリクラスをSitecoreに紐付ける必要はありません。JavaScriptやHTTPの配管コードを使ってビジネスオブジェクトをサーバーに移動させ、それらのオブジェクトをサードパーティのデータベースや他のサブシステムに保存するEntityServiceを定義することも可能です。

[Sitecore。Services.Contrib](https://github.com/Sitecore-Community/Sitecore.Services.Contrib)プロジェクトは、ビジネスオブジェクトをSitecoreのコンテンツツリーに保存したいときに使える基本クラスを提供します。このクラスは、自分だけのカスタムリポジトリクラスを実装するための出発点を提供します。

Sitecoreにビジネスオブジェクトを格納するには:

1.  カスタムリポジトリクラスを作成し、そこから導出してくださいSitecore.Services.Contrib.Data.SitecoreItemRepository<T>。
    
2.  以下の抽象および仮想メソッドを実装し、ビジネスオブジェクトプロパティとアイテムのフィールド間をマッピングするコードを提供します。
    
    protected abstract T CreateModelFrom(Item item); protected abstract string GetItemName(T entity); protected virtual void UpdateFields(T entity, Item item)
    

Sitecore.Services.Contrib.Data.SitecoreItemRepository<T>クラスはマスターデータベース内のSitecore項目に対して動作します。

Sitecore.Services.Contrib.Data.SitecoreItemRepository<T>派生型を作成する際に、コンストラクタパラメータとして、テンプレートのSitecore型とコンテンツルートを指定します。このように:

protected override Category CreateModelFrom(Item item) protected override string GetItemName(T entity) protected override void UpdateFields(T entity, Item item)
where T : Sitecore.Services.Core.Model.EntityIdentity
Member of

## カスタムメソッドの追加

-   コントローラークラスにカスタムアクションメソッドを追加できます。リクエストが{namespace}/{controller}/{id}/{action}ルートに一致すると選択されます。