2012年5月3日木曜日

AppHarborと格闘中(1)


だんだんAppHarbor以外でも詰まるようになってきた。

AppHarbor周り

・ソリューション作成時にASP Net WebサイトではなくASP.NET WEBアプリケーションを選ばないとうまくいかない。
その場合、AppHarborがprecompiledしてるからApp_Code入れるなよ~的なエラーを吐く。
なぜかbin/objフォルダの内容も上げないとうまくいかない。自分だけかも・・・

・.Net Framework 4.5には対応していない。Visual Studioのプロジェクトを右クリック→プロパティ→アプリケーション→対象のフレームワークから4に変更する必要がある。

LINQ周り

せっかくなのでLINQにも挑戦してみました。

・LINQでデータベースとやり取りするにはdbmlファイルを使ってマッピングするのが早い。というか私にはこの方法しか無理。
Visual Studioから追加できる。LINQ to SQLクラスという名前になっている。

・データをSELECTしてくるときは以下みたいな感じ。

DataClassesDataContext dc = new DataClassesDataContext(GetConnectionString());
dc.Connection.Open();

var query = from b in dc.BATTLELOG
            orderby b.LOGID descending
            select new
            {
                戦闘日付 = string.Format("{0:yyyy/MM/dd}", b.BATTLEDTE),
                登録者 = b.ENTUSR,
                自チーム名 = b.TEAMNAME,
                相手チーム名 = b.OTEAMNAME,
                戦闘マップ = b.MAPM.MAPSN,
                種類 = b.BATTLEM.BATTLETYPENAME,
                勝敗 = b.WINLOSE,
                時間帯 = b.TIMEMESH1.TIMEMESHSN + " 時",
                コメント = b.NOTE
            };

//SELECT結果をグリッドビューに表示
gv.DataSource = query;
gv.DataBind();

最初はConvert.ToStringでキャストを試みたけどうまくいかんかった・・・string.Formatだと何故か成功。

・INSERTするときは以下みたいな感じ。

BATTLELOG blog = new BATTLELOG
{
    ENTUSR = txtEntUsr.Text,
    TEAMNAME = txtTeamName.Text,
    OTEAMNAME = txtOTeamName.Text,
    MAPCD = txtMap.SelectedValue,
    BATTLETYPE = txtBattleType.SelectedValue,
    WINLOSE = txtWin.Text,
    BATTLEDTE = Convert.ToDateTime(txtBattleDate.Text),
    TIMEMESH = txtTimeMesh.SelectedValue,
    NOTE = txtNote.Text
};

dc.BATTLELOG.InsertOnSubmit(blog);
dc.SubmitChanges();

本当はトランザクションとかいろいろ張ってるけど割愛!!

・戦闘のn件だけ取りたい、という場合はSQLだとrownumとか使っていたが、LINQの場合はTakeを使う。
以下はLOGIDで降順ソートして先頭100件だけ取ってくる例。

var query = (from b in dc.BATTLELOG
            orderby b.LOGID descending
            select new
            {
                戦闘日付 = string.Format("{0:yyyy/MM/dd}", b.BATTLEDTE),
                登録者 = b.ENTUSR,
                自チーム名 = b.TEAMNAME,
                相手チーム名 = b.OTEAMNAME,
                戦闘マップ = b.MAPM.MAPSN,
                種類 = b.BATTLEM.BATTLETYPENAME,
                勝敗 = b.WINLOSE,
                時間帯 = b.TIMEMESH1.TIMEMESHSN + " 時",
                コメント = b.NOTE
            }).Take(100);

Visual Studio周り

・エディットコンティニュ(デバッグ中にコードを書き換える機能)はVisual Studioのプロジェクトを右クリック→プロパティ→WEB→一番下の「エディットコンティニュを有効にする」をONにしないと使えない。

0 件のコメント:

コメントを投稿