This project is read-only.

目次

  • 概要
    • 前提
  • NuGetのインストール
  • プロジェクトの作成
  • Somaのインストール
  • サンプルテーブルとデータの作成
  • プログラムの作成
  • プログラムの実行

概要

このドキュメントではF#を使ったとてもシンプルなプログラムの作り方を環境のセットアップから説明します。

前提

次のソフトウェアがあらかじめインストールされているものとします。

  • Visual Studio 2010 Professional
  • SQL Server 2008 Express

利用する環境が異なる場合は適宜読み替えてください。

NuGetのインストール

NuGetのVisual Studioアドインをインストールしてください。インストール方法は以下のページを参照してください。

プロジェクトの作成

Visual Studioの上部メニューから「File」 - 「New」 - 「Project...」と進み、F#のコンソールプロジェクトを作成します。ここでは、「SomaQuickStart」という名前で作成します。

new_project.png

Somaのインストール

作成されたプロジェクトをソリューションエクスプローラー上で右クリックし、「Manage NuGet Packages...」を選択します。

manage_nuget_packages.png

ダイアログが開いたら、右上のテキストボックスに「Soma」と入力しEnterキーを押します。

install.png

検索結果にSomaのパッケージが表示されたらInstallボタンを押します。
インストールが進むと、Somaが依存するFSPowerPack.Communityのライセンスを受け入れるかどうかのダイアログが開くので、内容を確認して「I Accept」を押してください。

license_acceptance.png

インストールが完了すると、プロジェクトの構成が以下のようになります。

project_after_installation.bmp

サンプルテーブルとデータの作成

サンプル用のテーブルとデータを作成します。
Visual Studioの上部メニューからSQL Serverに接続してください。

new_query_connection.bmp

開かれたエディタには、次のSQLを記述し実行してください。

use tempdb;

create table Employee (
  EmployeeId integer not null primary key, 
  EmployeeName varchar(20), 
  Hiredate date,
  Salary numeric(7,2),
  VersionNo integer
);

insert into Employee values(1, 'SMITH', '1980-12-17', 800, 1);
insert into Employee values(2, 'ALLEN', '1981-02-20', 1600, 1);
insert into Employee values(3, 'WARD', '1981-02-22', 1250, 1);

プログラムの作成

F#のプログラムを作成します。
Program.fsを開き、次のコードを記述します。

open System
open Soma.Core

let config = 
  { new MsSqlConfig() with
    member this.ConnectionString = "Data Source=.;Initial Catalog=tempdb;Integrated Security=True" }

type Employee = 
  { [<Id>]
    EmployeeId : int 
    EmployeeName : string
    Hiredate : DateTime
    Salary : decimal
    [<Version>]
    VersionNo : int }

[<EntryPoint>]
let main args =
  let employee = Db.find<Employee> config [1]
  printfn "before update: %A" employee 
  let employee = Db.update<Employee> config { employee with Salary = employee.Salary * 2M }
  printfn "after update: %A" employee 
  Console.ReadKey() |> ignore
  0


このプログラムのポイントを以下に示します。

  • 値configはデータベースの接続先やログ出力などの設定を表します。今回はSQL Serverに接続するのでMsSqlConfigというクラスを利用しています。また、ログ出力はデフォルトのコンソール出力を利用しています。詳細は設定を参照してください。
  • レコード型Employeeはデータベースのテーブルに対応します。Id属性は主キーを示し、Version属性は楽観的排他制御で利用されるバージョン番号を示します。詳細はマッピングを参照してください。
  • main関数ではDbモジュールを利用して主キーで1件を取得し、Salaryを2倍にして更新しています。


コードが記述ができたらビルドしてください。

プログラムの実行

Visual Studio上でF5キーを押し、プログラムを実行させてください。
実行すると、次のコンソールが表示されます。

result.png

実行結果のポイントを以下に示します。

  • 「LOG :」で始まる行は、Somaが出力するSQLのログです。SELECTとUPDATEの2つのSQLが実行されていることがわかります。
    • SELECT文では主キーによる検索が行われています。
    • UPDATE文では楽観的排他制御としてバージョン番号が検索条件に含まれています。またSET句のバージョン番号はインクリメントされています。
  • 更新前と更新後でEmployeeレコードのSalaryフィールドの値がプログラムで記述した通り2倍になっています。
  • 更新後のEmployeeレコードにはインクリメントされたバージョン番号がセットされています。

Last edited Aug 21, 2011 at 1:32 AM by toshihiro, version 19

Comments

No comments yet.