キーテーブルの作成

先ほどのApp.configの設定には「identityMethod="KeyTable"」という項目がありました。これはエンティティのアイデンティティ生成に専用のテーブルを使うという意味です。そのためスクリプトを流して「KeyTable」というテーブルを作成しておきます。スクリプトは「C:\Program Files\Mindscape\LightSpeed 2.1\Providers」にあります。

キーテーブル作成用のスクリプト(SQL Serverの場合)

CREATE TABLE KeyTable
(
  NextId INT NOT NULL
)

INSERT INTO KeyTable VALUES (1);

LightSpeedではエンティティの識別にIdentityField(データベースのIDをオブジェクトに格納し相互の一意性を保持するパターン)を採用しています。そのため、新しいエンティティを永続化する場合は、このテーブルを使用して重複しないIDを生成します。既定の設定では、このテーブルの値は10づつ増加していきます。このため2回に分けて処理を実行した場合、キー値は11と21のようになり連番にはなりません。あくまで、このIDはオブジェクトを識別する一意な値であることに注意してください。顧客IDや社員IDなどドメインで必要なIDがあれば、それは別途モデルに定義してコード体系に沿った採番ロジックを実装する必要があります。

LightSpeedContextの設定

それでは、Windowsフォームにコードを書いていきましょう。まず、LightSpeedContextクラスを変数として定義します。LightSpeedContextクラスは、LightSpeedの動作を管理するクラスです。コンストラクタにはモデルから生成されたUnitOfWork名(LsUnitOfWork)とApp.configで定義した名前(SqlServer)を設定します。

LightSpeedContextの宣言と設定変更
//Mindscape.LightSpeed名前空間をインポート
using Mindscape.LightSpeed;
using Mindscape.LightSpeed.Querying;

//EntityとUnitOfWorkの名前空間をインポート
using Ls.Domain;

namespace Ls.UI
{
  public partial class Form1 : Form
  {
    //LightSpeedContextの設定
    private static readonly LightSpeedContext<LsUnitOfWork>
      _context = new LightSpeedContext<LsUnitOfWork>("SqlServer");

private void Form1_Load(object sender, EventArgs e)
{
  //ログの設定
  _context.Logger = new 
    Mindscape.LightSpeed.Logging.ConsoleLogger();

LightSpeedContextの設定は通常はApp.configから読み込みますが、コードから設定することも可能です。この例では、フォームのロードイベントでログ出力の設定をしています。

ロギング機能

LightSpeedには実行したSQLを出力するログ機能が備わっています。ログ出力の設定方法はLightSpeedContextのLoggerプロパティに、ログ出力用のクラスを指定します。ログ出力用のクラスとしては、Console.WriteLineメソッドを実行するConsoleLoggerクラスと、Trace.WriteLineメソッドを実行するTraceLoggerクラスの2種類が用意されています。高度なログ出力をしたい場合にはlog4netやNLog等を使うようにILoggerインタフェースを実装すれば良いでしょう。