目次

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

概要

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

前提

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

  • Visual Studio 2010 Professional
  • SQL Server 2008 Express

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

NuGetのインストール

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

プロジェクトの作成

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

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

FSharp.Coreへの参照の追加

プロジェクトをソリューションエクスプローラー上で右クリックし、「Add References...」を選択します。

ダイアログが開いたら、FSharp.Coreのバージョン4.0.0.0を選択してOKボタンを押してください。

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

サンプル用のテーブルとデータを作成します。
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);

プログラムの作成

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

using System;
using Soma.Core;

namespace SomaQuickStart
{
    public class Config : MsSqlConfig
    {
        public override string ConnectionString { get { return "Data Source=.;Initial Catalog=tempdb;Integrated Security=True"; } }
    }

    public class Employee
    {
        [Id]
        public int EmployeeId { get; set; }

        public string EmployeeName { get; set; }

        public DateTime Hiredate { get; set; }

        public decimal Salary { get; set; }

        [Version]
        public int VersionNo { get; set; }

        public override string ToString()
        {
            return string.Format("EmployeeId: {0}, EmployeeName: {1}, Hiredate: {2}, Salary: {3}, VersionNo: {4}",
                                 EmployeeId, EmployeeName, Hiredate, Salary, VersionNo);
        }
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            var db = new Db(new Config());
            var employee = db.Find<Employee>(1);
            Console.WriteLine("before update: {0}", employee);
            employee.Salary = employee.Salary*2;
            db.Update(employee);
            Console.WriteLine("after update: {0}", employee);
            Console.ReadKey();
        }
    }
}

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

  • クラスConfigはデータベースの接続先やログ出力などの設定を表します。今回はSQL Serverに接続するのでMsSqlConfigというクラスを継承しています。また、ログ出力はデフォルトのコンソール出力を利用しています。詳細は設定を参照してください。
  • クラスEmployeeはデータベースのテーブルに対応します。Id属性は主キーを示し、Version属性は楽観的排他制御で利用されるバージョン番号を示します。詳細はマッピングを参照してください。
  • Programクラスの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 3:11 AM by toshihiro, version 14

Comments

No comments yet.