目次

概要

Somaでは、テーブルにマッピングされたクラスを使用します。
クラスのソースコードを手動で作成するのは煩雑なので、データベースやSQLの結果セットのメタデータから自動生成する機能をPowerShellスクリプトで提供しています。
スクリプトファイルは配布zipファイルの .\script ディレクトリに格納されています。

なお、このドキュメントにおいて、エンティティとはデータベースのテーブルやビューに対応するクラスを意味します。
また、DTOとは、任意のSELECT文を実行して得られる結果セットに対応するクラスを意味します。

エンティティの生成

F#、C#、VB.NETのコードを生成するスクリプトがそれぞれ存在します。
  • gen-entities-fs.ps1 (F#用)
  • gen-entities-cs.ps1 (C#用)
  • gen-entities-vb.ps1 (VB.NET用)

エンティティ生成スクリプトの使用例

次のように使用します。
この例では、SQL Server 2008 に接続して C#用のコードを生成します。

PowerShellコマンドライン
PS C:\Soma\script> .\gen-entities-cs.ps1 -namespace "Sample" > Sample.cs

上記を実行すると次のファイルが生成されます。

C# : Sample.cs
using System;
using Soma.Core;

namespace Sample 
{
    [Table(Name = "Employee", IsEnclosed = false)]
    public partial class Employee
    {
        [Id(IdKind.Identity)]
        [Column(Name = "EmployeeId", IsEnclosed = false)]
        public Int32 Employeeid { get; set; }
        [Column(Name = "EmployeeName", IsEnclosed = false)]
        public String Employeename { get; set; }
        [Column(Name = "DepartmentId", IsEnclosed = false)]
        public Int32 Departmentid { get; set; }
        [Version]
        [Column(Name = "VersionNo", IsEnclosed = false)]
        public Int32 Versionno { get; set; }
    }
    
    [Table(Name = "Department", IsEnclosed = false)]
    public partial class Department
    {
        [Id(IdKind.Identity)]
        [Column(Name = "DepartmentId", IsEnclosed = false)]
        public Int32 Departmentid { get; set; }
        [Column(Name = "DepartmentName", IsEnclosed = false)]
        public String Departmentname { get; set; }
        [Version]
        [Column(Name = "VersionNo", IsEnclosed = false)]
        public Int32 Versionno { get; set; }
    }
    
}

エンティティ生成スクリプトのパラメータ

パラメータには次のものがあります。

パラメータ名 説明 必須 デフォルト値
invariant ADO.NETのDBプロバイダーの不変名です。 string "System.Data.SqlClient"
connectionString データベースの接続文字列です。 string "Data Source=.;Initial Catalog=Soma.Tutorial;Integrated Security=True"
fileHeader ファイルのヘッダに付与する文字列です。$nullの場合は何も付与されません。 string $null
namespace 生成されるエンティティクラスの名前空間です。 string "Example"
includeSchemaNamePattern 生成に含めたいのスキーマ名の正規表現文字列です。 string '.*'
excludeSchemaNamePattern 生成から除外したいスキーマ名の正規表現文字列です。 string '.*\$.*'
includeTableNamePattern 生成に含めたいテーブル名の正規表現文字列です。 string '.*'
excludeTableNamePattern 生成から除外したいテーブル名の正規表現文字列です。 string '.*\$.*'
versionColumnNamePattern バージョンカラム名を判別する正規表現文字列です。この文字列とマッチしたカラムに対応するプロパティにはSoma.Core.VersionAttributeが付与されます。 string '^VERSION([_]?NO)?$'
isEnclosed Soma.Core.TableAttributeやSoma.Core.ColumnAttributeのIsEnclosedプロパティを有効にするかどうかのスイッチです。 swich
convert アンダースコア区切りのテーブル名やカラム名をキャメルケースのエンティティ名やプロパティ名に変換してコードを生成するかどうかのスイッチです。 swich


パラメータで制御できない場合は、スクリプトを直接カスタマイズしてください。

DTOの生成

F#、C#、VB.NETのコードを生成するスクリプトがそれぞれ存在します。
  • gen-dto-fs.ps1 (F#用)
  • gen-dto-cs.ps1 (C#用)
  • gen-dto-vb.ps1 (VB.NET用)

DTO生成スクリプトの使用例

次のように使用します。
この例では、SQL Server 2008 に接続して C#用のコードを生成します。

PowerShellコマンドライン
PS C:\Soma\script> .\gen-dto-cs.ps1 -namespace "Sample" -typeName "Sample" -sql "select * from Employee, Department" > Sample.cs

上記を実行すると次のファイルが生成されます。

C# : Sample.cs
using System;
using Soma.Core;

namespace Sample 
{
    public partial class Sample
    {
        [Column(Name = "EmployeeId")]
        public Int32 EmployeeId { get; set; }
        [Column(Name = "EmployeeName")]
        public String EmployeeName { get; set; }
        [Column(Name = "DepartmentId")]
        public Int32 DepartmentId { get; set; }
        [Column(Name = "VersionNo")]
        public Int32 VersionNo { get; set; }
        [Column(Name = "DepartmentName")]
        public String DepartmentName { get; set; }
    }
}

DTO生成スクリプトのパラメータ

パラメータには次のものがあります。

パラメータ名 説明 必須 デフォルト値
invariant ADO.NETのDBプロバイダーの不変名です。 string "System.Data.SqlClient"
connectionString データベースの接続文字列です。 string "Data Source=.;Initial Catalog=Soma.Tutorial;Integrated Security=True"
fileHeader ファイルのヘッダに付与する文字列です。$nullの場合は何も付与されません。 string $null
namespace 生成されるエンティティクラスの名前空間です。 string "Example"
typeName DTOのクラスの単純名です。 string yes
sql 実行するSQLです。 string yes
convert アンダースコア区切りのテーブル名やカラム名をキャメルケースのエンティティ名やプロパティ名に変換してコードを生成するかどうかのスイッチです。 swich


パラメータで制御できない場合は、スクリプトを直接カスタマイズしてください。

Last edited Jun 24, 2011 at 9:10 AM by toshihiro, version 8

Comments

No comments yet.