既存プロジェクトに組み込む~MVC編~
前項と基本的に同じ作業なので、差分のみ記載します。
ファイル単位での名前空間記載など、細かな修正を実施
DLLと名前空間追加後に、MVCプロジェクトのDefault.aspxとの競合を避けるためにDynamic DataのDefault.aspxをリネームします(本稿では、dynamic.aspxとします)。その後、dynamic.aspx.csファイルを、以下の太字部分のように修正します。
using ASP.NET MVC アプリケーションの名前空間;
protected void Page_Load(object sender, EventArgs e)
{
// System.Collections.IList visibleTables = Global.DefaultModel.VisibleTables;
// ↑既定のコード ↓修正コード
System.Collections.IList visibleTables = MvcApplication.DefaultModel.VisibleTables;
Dynamic Dataプロジェクトの設定のままではMVCプロジェクト側のGlobal.asax.csファイルが参照できません。そのため、MVCプロジェクト側の名前空間を追加し、Global.asax.csファイル内のクラス名を変更しています。具体的に言うと、Dynamic DataプロジェクトではGlobalクラスでしたが、MVCプロジェクトではMvcApplicationクラスのためその修正です。
続いて、Global.asaxファイルの追記作業を実施します。
using DDincludeMvc.Models;
using System.Web.DynamicData;
namespace MVCプロジェクトの名前空間
{
// メモ: IIS6 または IIS7 のクラシック モードの詳細については、
// http://go.microsoft.com/?LinkId=9394801 を参照してください
public class MvcApplication : System.Web.HttpApplication
{
private static MetaModel s_defaultModel = new MetaModel();
public static MetaModel DefaultModel
{
get
{
return s_defaultModel;
}
}
public static void RegisterRoutes(RouteCollection routes)
{
DefaultModel.RegisterContext(typeof(登録するEDM名), new ContextConfiguration() { ScaffoldAllTables = true });
// Dynamic Data用URLルーティング
routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
Model = DefaultModel
});
// MVCアプリ用URLルーティング
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
Dynamic Dataプロジェクト、MVCプロジェクト共にGlobal.asax.csファイルにURLルーティングを登録しています。Dynamic Dataプロジェクトはさらに、データモデルの登録や、スキャフォールディング機能の有効化なども設定しています。そのため、プロジェクトを統合するには、それぞれのプロジェクトを競合させないようにGlobal.asax.csファイルの記載をまとめる必要があります。
上記コードでは、Dynamic Dataプロジェクト側のURLルーティングの登録と、データモデルの登録並びに、スキャフォールディング機能の有効化をMVCプロジェクトの前に記載しています。RegisterRoutesメソッドはHTTPリクエストが発生した際に上から順にルーティングルールを実行します。そのため、MVCアプリケーションよりも先にDynamic Dataアプリケーションの記載が必要になります。
以上で設定完了です。作業完了すると、図5のようになります。

実行すると実行直後はMVC アプリケーションに、dynamic.aspx(Dynamic Dataの旧Default.aspx)のURLを入力すれば、Dynamic Dataアプリケーションに遷移します。ここから、CSSの調整並びに統合などが発生しますが、そちらは必要に応じて実施してください。
まとめ
今回はWeb FormでDynamic Dataを有効化する方法と、実プロジェクトへの組み込みについてご紹介しました。
Web Formでも容易にData Annotationを利用する方法はすぐにでも既存のWeb Formアプリケーションに適用できるのではないでしょうか。
また、それだけでは不足する場合や、MVCアプリケーションの場合にDynamic Dataの組み込みもご紹介できたため、少なからず実プロジェクトへの組み込みに対する偏見などに対しても実施しやすいと感じて頂けたのであれば幸いです。
次回はDynamic Dataにおけるフィールドテンプレートと属性のカスタマイズについてご紹介する予定です。お楽しみに。
