ASP.NET: しょぼしょぼのFramework 1.1 のコードを VS2008で2.0に変える。

ほんとは3.5にしたいのですが。。。

1. 認証をMembership 対応

既存のデータベースにC:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe 追加。

 

2. SubSonicでDALを生成

ActiveRecordはPKが必要なのでないテーブルにはintegerでINDENTITYを振る。

 

3. FormViewはObjectDataSourceでバインドさせる

SubSonicが生成する %TableName%Controller はDataObjectになっているのでデフォルトのSelect/Insert/Updateフォームを自動生成してくれます。

 

4. SelectをPK以外で行う

FetchById()以外でSELECTさせたいのです。%TableName%Controller はPartialになっているので、同じ名前のクラスのファイルをもうひとつ作ります。

そこにたとえばFetchByPage()とかSELECTを実行するメソッドを用意します。こんな感じで。

       [DataObjectMethod(DataObjectMethodType.Select, false)]
        public TblPageContentCollection FetchByPage(int page, string corp)
        {
            Query q = TblPageContent.CreateQuery();
            q.AddWhere("Page", page);
            q.AddWhere("CorporateCode", corp);

            return FetchByQuery(q);
        }

次に、ObjectDataSourceのSelectMethodを上記の物に変えて、

SelectMethod="FetchByPage"

メソッドパラメータを定義します。

            <SelectParameters>
                <asp:Parameter Name="Page" Type="Int32"  />
                <asp:Parameter Name="Corp" Type="String"  />  
            </SelectParameters>
ObjectDataSourceにSelectingイベントを定義してコードビハインドに実装します。
        protected void MailchPageContent_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            e.InputParameters["Page"] = CurrentPage;
            e.InputParameters["Corp"] = CorpCode;
        }
これでFormView.DataBind()すると表示させるようになります。
 
5. Updateをカスタマイズする。
データベースのフィールドに必要であるがユーザーに入力させないものは Updatingでパラメータにフィルします。
        protected void MailchPageContent_Updating(object sender, ObjectDataSourceMethodEventArgs e)
        {
            e.InputParameters["CorporateCode"] = CorpCode;
            e.InputParameters["Page"] = CurrentPage;
            e.InputParameters["UpdateIdUser"] = 0;
            e.InputParameters["UpdateDate"] = DateTime.Now;
        }

これで更新できるようになります。ただし、SubSonicのUpdateはPKを必要とするので、

        <asp:FormView ID="PageContent" runat="server" DataSourceID="MailchPageContent">
            <EditItemTemplate>
            <asp:TextBox ID="ContentIdBox" runat="server" Text='<%# Bind("ContentId") %>' 
                            Visible="false" />

のような邪悪なコードを差し込んでおきましょう。。。そんなんでいいんか。

カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中