PostgreSQLでASP.NET Dynamic Dataサイトを構築するためにやったこと【ご注意:失敗に終わりました】 - プログラマーな日々
PostgreSQLでASP.NET Dynamic Dataサイトを構築することを試みましたが、失敗に終わりました。誰かの役にたつかもしれないので、試行錯誤の記録を残しておきます。 ...
以前一度は失敗していますが、後日ASP.NET Dynamic Dataサイトの構築に成功したので、手順を残しておきます。
検証した環境
- WindowsXP SP3
- .NET Framework 3.5
- Visual Studio 2008 SP1
- PostgreSQL 8.3
- Npgsql 2.0.11.91
テーブルの作成
まず、テーブルを作成しました。
CREATE TABLE hoge_table ( hoge_id smallint NOT NULL, hoge_name character varying(255), CONSTRAINT hoge_table_pkey PRIMARY KEY (hoge_id) ) WITH ( OIDS=FALSE ); ALTER TABLE hoge_table OWNER TO postgres;
Npgsqlのインストール
Npgsqlをインストールします。
ダウンロード
pgFoundry: Npgsql .Net Data Provider for Postgresql: Project Filelist
- リンク先から最新バージョンのNpgsqlをダウンロードします。(2011/07/22時点では「Npgsql2.0.11.91-bin-ms.net3.5sp1.zip」)
- 解凍して適当なディレクトリに配置します。
GAC(グローバルアセンブリキャッシュ)への登録
- Visual Studio 2008 コマンドプロンプトを起動します。
- Npgsql.dllのあるディレクトリへ移動します。
- 以下のコマンドを実行します。
gacutil /i Npgsql.dll gacutil /i Mono.Security.dll
- C:\Windows\assemblyに上記のdllが登録されていることを確認します。
machine.configへの登録
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.configにNpgsqlを登録します。
<configuration> <!-- 省略 --> </system.data> <DbProviderFactories> <!-- 省略 --> <!-- Versionは、GACに登録したNpgsql.dllのバージョンに合わせること --> <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.11.91, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" /> </DbProviderFactories> </system.data> <!-- 省略 --> </configuration>
Npgsqlインストールの確認
コンソールアプリを作成し、以下のステートメントを実行します。例外が発生しなければ正常に登録できています。
System.Data.Common.DbProviderFactory f = System.Data.Common.DbProviderFactories.GetFactory("Npgsql");
Entity Framework(以下EF)のソースコードを生成
NpgsqlはVisual Studioのウィザードに対応していないので、コマンドラインで生成します。
- Visual Studio 2008 コマンドプロンプトを起動します。
- 適当なディレクトリへ移動します。
- 以下のコマンドを実行します。/projectに設定する名前は任意ですが、ここでは「sample」としておきます。以降は「Sample」という名前を指定したという前提で説明を進めます。
edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"Port=5432;Encoding=UTF-8;Server=XXX;Database=XXX;UserId=XXX;Password=XXX" /project:Sample
以下のメッセージが表示されれば、正常にソースコードが生成できています。
Microsoft (R) EdmGen version 3.5.0.0 Copyright (C) 2008 Microsoft Corporation. All rights reserved. データベースの情報を読み込んでいます... ssdl ファイルを書き込んでいます... 格納層から概念層を作成しています... msl ファイルを書き込んでいます... csdl ファイルを書き込んでいます... オブジェクト層ファイルを書き込んでいます... ビュー ファイルを書き込んでいます... 生成完了 -- エラー 0 件、警告 0 件
以下の5ファイルがカレントディレクトリに生成されているはずです。
- Sample.csdl
- Sample.msl
- Sample.ObjectLayer.cs
- Sample.ssdl
- Sample.Views.cs
Dynamic Data エンティティ Web サイトの構築
Webサイトの構築
- Visual Studioを起動し、メニューの[ファイル] - [新規作成] - [Webサイト]を選択します。
- [Dynamic Data エンティティ Web サイト]を選択します。
生成したソースファイルの追加
先ほど生成した以下のソースファイルをApp_Codeフォルダに追加します。
- Sample.csdl
- Sample.msl
- Sample.ObjectLayer.cs
- Sample.ssdl
- Sample.Views.cs
接続文字列の設定
Web.configにEFの接続文字列を設定します。
<configuration> <!-- 省略 --> <connectionStrings> <add name="SampleContext" connectionString="metadata=~/App_Code/Sample.csdl|~/App_Code/Sample.msl|~/App_Code/Sample.ssdl;provider=Npgsql;provider connection string="Server=XXX;Port=5432;UserID=XXX;Password=XXX;Database=XXX"" providerName="System.Data.EntityClient"/> </connectionStrings> <!-- 省略 --> </configuration>
Global.asaxの編集
- Global.asaxの17行目のコメントを外します。
- Contextのクラス名とScaffoldAllTablesプロパティを以下のように書き換えます。
model.RegisterContext(typeof(Sample.SampleContext), new ContextConfiguration() { ScaffoldAllTables = true });
参照設定(2011/08/15追記)
System.Data.Entityへの参照を追加します。
ASP.NETのバージョン設定(2011/08/15追記)
インターネットインフォーメーションサービスを起動し、Webサイトのプロパティを表示します。[ASP.NET]のタブをクリックし、[ASP.NETバージョン]を正しく設定します。(動作環境が.NET Framework 3.5の場合はASP.NET 2.0を選択します)
カスタマイズ
カスタマイズについては以下を参考にしてください。
DBアプリをコーディングレスで構築する「ASP.NET Dynamic Data」 − @IT
メタデータ編集によるDynamic Dataアプリケーションのカスタマイズ
参考にしたページ
[C#][EntityFramework]PostgreSQLでEntityFrameworkしてみた
ここ最近調べてたことだけど、やっと出来た!! ということでVisual Studioを使ってみた感じだとSQL Serverにしか対応してないように見えるEntityFrameworkを、PostgreSQLで使うメモです。 ...
DBアプリをコーディングレスで構築する「ASP.NET Dynamic Data」 − @IT
そして、第1弾となる今回は、まずASP.NET Dynamic Data(以降、Dynamic Data)について解説する。このDynamic Dataは、リレーショナル・データベースをモデリングしたモデル・クラス(データ・モデル)を基に、CRUD(Create/Read/Update/Delete)機能を持ったアプリケーションを自動生成する機能だ。 ...
ASP.NET Dynamic Data活用編:CodeZine(コードジン)
PostgreSQLでASP.NET Dynamic Dataサイトを構築したい
PostgreSQLでASP.NET Dynamic Dataサイトを構築する方法、もしくはそれに代替できる方法を調査しています。 ...
LINQ to SQLでPostgreSQLのASP.NET Dynamic Dataサイトを構築したい
LINQ to SQLでPostgreSQLのASP.NET Dynamic Dataサイトを構築する方法を模索しています。 ...
(2011/08/15追記)