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にしないと使えない。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿