PostgresqlでDynamicData
Asp.Net DynamicDataは、マスターメンテナンス画面とか
簡単なCRUDするWebアプリケーションを
ほぼノンコーディングで作成することができます。
基本的にはSQLServerでやれば簡単に作れるのですが
DBは、SQLServerだけではないので
Postgresqlで奮闘してみました。
・環境
Visual Web Developer 2008
Postgresql8.4
.NetFramework3.5
・準備
NpgsqlをダウンロードしてGACに登録する。
(Npgsql.dllとMono.Security.dll)
machen.configに以下を追記する。
<DbProviderFactories> <!--このタグは元々存在する--> <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.8.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" /> </DbProviderFactories>
ああ〜当たり前ですがDBを作ってテーブルも先に作っておきます。
ここまで準備したらVWDでプロジェクトを作成します。
テンプレートは「動的データエンティティWebアプリケーション」を選択します。
SQLServerであればクラスの追加で「ADO.NET Entity Data Model」を選択するんですが
他のDBではこうはいきません。
edmgen.exeというのを使ってファイルを自動生成します。
コマンドプロンプトに以下を入力します
C:\WINDOWS\Microsoft.NET\Framework\v3.5\edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"Port=5432;Encoding=UTF-8;Server=localhost;Database=BookStore;UserId=postgres;Password=postgres" /project:BookStore /namespace:"DynamicDataEntitySample002.models" /entitycontainer:"BookStoreEntities"
ポイントは、namespaceのところで
これは、ディレクトリ構造と一致していないとうまく動きません。
ファイルが5つ生成されるのですが、全て同一のディレクトリに入れてください。
(上記の場合は、DynamicDataEntitySample002\modelsにファイルをコピー)
追加した「ssdl」「csdl」「msl」はプロパティのビルドアクションで
「埋め込まれたリソース」に設定します。
次にWeb.configに接続文字列を追加します。
<connectionStrings> <add name="BookStoreEntities" connectionString="metadata=res://*/DDWeb.Models.BookStore.csdl | res://*/DDWeb.Models.BookStore.msl | res://*/DDWeb.Models.BookStore.ssdl;provider=Npgsql; provider connection string='Server=localhost;Port=5432;UserID=postgres;Password=postgres;Database=BookStore'" providerName="System.Data.EntityClient"/> </connectionStrings>
name属性は、edmgen.exeのパラメータ「entitycontainer」で指定したものにしてください。
最後にGlobal.asaxのコメントアウトされている以下をコメントインして
typeof()のカッコ内とScaffoldAllTables = をtrueに変更してください。
model.RegisterContext(typeof(Models.BookStoreEntities), new ContextConfiguration() { ScaffoldAllTables = true });
これでビルドエラーになる場合(多分なる)は、
System.Data.Entity.dllとSystem.Runtime.Serialization.dllを参照してください。
実行すればきっとうまく画面が表示されるはず〜
なんか間違ってたらご指摘くださいm(__)m