目次

概要

Visual Studio 2010 Professional Editionを使用し、Somaを利用して簡易的なデータベースアクセスを行うプログラムを作成するまでの手順を説明します。

プロジェクトの作成

コンソールプロジェクトを選択して「Soma.QuickStart」という名前をつけOKボタンを押します。

new_project.png

ライブラリの追加

配布ファイルに含まれている「Soma.dll」を追加します。

add_libs.png

参照の追加

「Soma.dll」への参照を追加します。

add_reference.png

データベースの作成

プロジェクトの直下にSomaQuickStart.sqlというファイルを作成し、次のSQLを記述します。

create database SomaQuickStart;
GO
use SomaQuickStart;
GO
create table Department (
	DepartmentId int primary key,
	DepartmentName varchar(50)
);
create table Employee (
	EmployeeId int primary key,
	EmployeeName varchar(50),
	DepartmentId int,
	CONSTRAINT FK_Department FOREIGN KEY(DepartmentId) REFERENCES Department(DepartmentId)
);
GO
insert into Department values (1, 'Account');
insert into Department values (2, 'Sales');
insert into Employee values (1, 'King', 1);
insert into Employee values (2, 'Smith', 1);
insert into Employee values (3, 'Jhon', 2);
GO

エディタの上にある「Execute SQL」ボタンを押してSQLを実行します。
サンプルのデータが含まれたデータベースが作成されます。

create_db.png

Entity Data Modelの追加

ADO.NET Entity Data Modelを「Model1.edmx」という名前で追加します。

add_data_model.png

「Generate from Database」を選択してNextボタンを押します。

choose_model.png

New Connection...ボタンを押します。

choose_connection.png

接続するデータベースに「SomaQuickStart」を選択しOKボタンを押します。

connection_properties.png

「SomaQuickStart.dbo」を選択しNextボタンを押します。

choose_connection.png

「Tables」を選択しFinishボタンを押します。

choose_db_objects.png

ソリューションにModel1.edmxとApp.Configが追加され、App.Configには次のような接続文字列の設定が含まれることを確認してください。

<connectionStrings>
	<add name="SomaQuickStartEntities"
	     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=(local);Initial Catalog=SomaQuickStart;Integrated Security=True;MultipleActiveResultSets=True&quot;"
	     providerName="System.Data.EntityClient" />
</connectionStrings>

App.Configの修正

App.ConfigにSoma用データプロバイダを登録する必要があります。
configuration要素の直下に以下の記述を追加します。

<system.data>
    <DbProviderFactories>
        <clear />
        <add name="Soma Data Provider for SqlServer"
             invariant="Soma.Data.SqlClient"
             support="FF"
             description="Soma Data Provider for SqlServer"
             type="Soma.Data.SqlClient.SqlClientFactory, Soma" />
    </DbProviderFactories>
</system.data>

修正後のApp.Config

Soma用データプロバイダの登録を行うとApp.Config全体の記述は次のようになります。

<system.data>
<?xml version="1.0" encoding="utf-8"?>

<configuration>
	<connectionStrings>
		<add name="SomaQuickStartEntities"
		     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=(local);Initial Catalog=SomaQuickStart;Integrated Security=True;MultipleActiveResultSets=True&quot;"
		     providerName="System.Data.EntityClient" />
	</connectionStrings>
	<system.data>
		<DbProviderFactories>
			<clear />
			<add name="Soma Data Provider for SqlServer"
			     invariant="Soma.Data.SqlClient"
			     support="FF"
			     description="Soma Data Provider for SqlServer"
			     type="Soma.Data.SqlClient.SqlClientFactory, Soma" />
		</DbProviderFactories>
	</system.data>
</configuration>

ロガーの作成

SQLのログを出力するためのロガーを作成します。ロガーはSoma.Data.Logging.ILoggerを実装します。ここではコンソールにログ出力を行うクラスを作成します。

using System;
using Soma.Data.Logging;

namespace Soma.QuickStart
{
	internal class ConsoleLogger : ILogger
	{
		#region ILogger Members
		public void LogBeforeExecution(LogContext logContext)
		{
			Console.WriteLine(logContext.FormattedSql);
		}

		public void LogAfterExecution(LogContext logContext)
		{
		}
		#endregion
	}
}

リポジトリの作成

リポジトリはSoma.Data.EntityRepositoryBaseを継承して作成します。ここでは、Employeeテーブルから全レコードを取得する処理を記述します。

using System.Collections.Generic;
using Soma.Data;

namespace Soma.QuickStart
{
	internal class EmployeeRepository : EntityRepositoryBase<SomaQuickStartEntities, Employee>
	{
		public EmployeeRepository()
			: base(() => new SomaQuickStartEntities(EntityConnectionFactory.Create("name=SomaQuickStartEntities")))
		{
		}

		public IEnumerable<Employee> SelectAll()
		{
			return GetResultList(employee => employee);
		}
	}
}
コンストラクタの記述方法に注意してください。
コンストラクタではオブジェクトコンテキストを生成して返すデリゲートを親クラスのコンストラクタに渡します。
オブジェクトコンテキストのコンストラクタでは、Soma.Data.EntityConnectionFactoryを使って生成したSystem.Data.EntityClient.EntityConnectionのインスタンスを渡してください。

ロガーとリポジトリを利用するプログラム

ロガーは、SomaSettingsに設定することで使用できるようになります。
リポジトリはインスタンス化して使用します。

using System;

namespace Soma.QuickStart
{
	internal class Program
	{
		private static void Main(string[] args)
		{
			// ロガーの設定
			SomaSettings.Logger = new ConsoleLogger();

			// LINQ to Entitiesを使用した全件取得
			ExecuteSelectAll();

			Console.ReadKey();
		}

		/// <summary>
		/// LINQ to Entitiesを使用した全件取得
		/// </summary>
		private static void ExecuteSelectAll()
		{
			Console.WriteLine("*** SelectAllの実行 ***");
			var repository = new EmployeeRepository();
			var employees = repository.SelectAll();
			Console.WriteLine("*** SelectAllの結果 ***");
			foreach (var employee in employees)
			{
				Console.WriteLine("EmployeeName={0}", employee.EmployeeName);
			}
			Console.WriteLine();
		}
	}
}

ビルド

ソリューションをビルドします。

実行

このプログラムを実行すると次の結果がコンソールに出力されます。

*** SelectAllの実行 ***
SELECT
[Extent1].[EmployeeId] AS [EmployeeId],
[Extent1].[EmployeeName] AS [EmployeeName],
[Extent1].[DepartmentId] AS [DepartmentId]
FROM [dbo].[Employee] AS [Extent1]
*** SelectAllの結果 ***
EmployeeName=King
EmployeeName=Smith
EmployeeName=Jhon

表示されるSQLはConsoleLoggerから出力されたものです。

Last edited Aug 16, 2010 at 9:47 PM by toshihiro, version 15

Comments

No comments yet.