veigr

11月 222013
 

参考:IISマネージャーからアプリケーションインポートしたら、アプリケーションプールのエラーが出た – minato128のブログ

まさにこれ。

  • msdeployはデプロイ先のアプリケーションプールの.NETバージョンとデプロイ対象アプリのバージョンが一致しているかチェックする
  • IISに4.5をインストールしていたとしても、設定できるのはv4.0
  • VS2010のtargetは4.5に対応していないのか、この状況ではエラーを吐いてデプロイできない

使用しようとしているアプリケーション プールでは、’managedRuntimeVersion’ プロパティが ‘v4.0’ に設定されています。このアプリケーションには ‘v4.5’ が必要です。

  • /t:Packageでデプロイパッケージを作る際のmsbuildオプションに/p:VisualStudioVersion=11.0 (2013は12.0なのかな?)をつければVS2012のtargetを使用するようになるらしく、エラーを吐かずに正常にデプロイ出来るようになる
11月 222013
 

ODACの11g、12cにはOracle.ManagedDataAccessというのが追加されており、ネイティブコードが無くなったのでサーバー環境へのデプロイ時にODP.NETやOracleClientのインストールが不要になる!ということで、やり方を調べてみたメモ。

参考:oracle – Deploying and Configuring ODP.NET to work without installation with Entity Framework – Stack Overflow

これのBのパターンでうまく行った。

  • WCFサービスのホストプロジェクトなどDB接続が必要になるプロジェクトの参照にEntityFramewrokとOracle.ManagedDataAccessを追加し、ローカルコピーをTrueに
  • Web.config/App.configを以下のように設定
[xml]




















[/xml]

  • 適当にデプロイ

Oracle.ManagedDataAccessDTC.dll が必要な場合

  • TransactionScope を使う場合など、Oracle.ManagedDataAccessDTC.dll が必要な時がある
    • 無いと実行時にFileNotFoundExceptionで死ぬ
  • Oracle.ManagedDataAccess.dllと同様に、実行パスかGACに入ってればOK
  • Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ を必要とする点に注意 (SP1じゃなくても大丈夫だとは思うが…)
    • これも同様に、インストールされていないと実行時にFileNotFoundExceptionで死ぬ
  • Oracle.ManagedDataAccessDTC.dll も Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ も32bit版と64bit版があるので、実行環境に合わせたものを使おう
11月 202013
 

アニメ版はちょっとなー原作版出ないかなーと思ってたところに出てくれました。
某イベント時に作られたもので当初通販もあったのですが、昼から開始されたのに夜にはもう無くなっていて、買えなかった記憶…
その後受注再販があったため、喜んで購入した次第。

Continue reading »

10月 312013
 

DbContextでの話。

普通はDbContextから取得したデータを更新すれば良い。
[csharp]
using (var context = new Entities())
{
var hoge= context.Hoge.Find(“id的な”);
hoge.Fuga = “New!”;
context.SaveChanges();
}
[/csharp]

これはDbContextに変更追跡機能があるため可能な事。
DbContextのライフサイクル外から受け取ったEntityオブジェクトなんかはただのPOCOであり、どう変更されたかなんてDbContextは知らない。
DataSetなんかは、DataTable自体が変更追跡機能持っててシリアライズもできたのだけど…

自己追跡エンティティ(STE)なんかもあるけど、Not Recommendedとされているし、EF6やVS2013ではもう使えない。
EF4から導入されたばかりなのに短い寿命でしたね…

んで、WCFなんかで外部から受け取ったデータは当然変更追跡の対象外なため、Attachとかしないとダメなことは想像付く。
でもAttachしただけではUnchangedな状態なので、変更してくれない。
ではどうすれば良いかというと、どうやらModified状態に変更してしまえば勝手に更新してくれるようだ。
[csharp]
public void Update(Hoge hoge){
using (var context = new Entities())
{
context.Hoge.Attach(hoge);
context.Entry(hoge).State = EntityState.Modified;
context.SaveChanges();
}
}
[/csharp]
削除はAttachしてからRemoveすればOK。
[csharp]
public void Remove(Hoge hoge){
using (var context = new Entities())
{
context.Hoge.Attach(hoge);
context.Hoge.Remove(hoge);
context.SaveChanges();
}
}
[/csharp]

ちなみにナビゲーションプロパティでIncludeされてる関連オブジェクトがある場合で、外部キーの値を変更したのに、関連オブジェクトは変更前のままとかいう場合、Attachすると死ぬ。
[csharp]
//どっかで読み込んだ
context.Hoge
.AsNoTracking()
.Include(x => x.Piyo)
;
[/csharp]
[csharp]
//どっかで外部参照のキー値を更新した
hoge.PiyoId = “new id”; //※hoge.Piyoは変更前のまま
[/csharp]
[csharp]
//そのままAttachすると死ぬ
context.Hoge.Attach(hoge);
[/csharp]
この場合、どうやらナビゲーションプロパティをnullにしてしまえばAttachできる。
関連オブジェクトを再取得してきてちゃんと値を合わせてやってもうまくいくんじゃないかな?(試してない
[csharp]
hoge.Piyo = null;
//これなら大丈夫。取得時にIncludeしてないのと同じ状態になる。
context.Hoge.Attach(hoge);
[/csharp]

8月 252013
 

潜水艦Lv

タイミング 出撃回数 イムヤLv ゴーヤLv
E4開始 0 20 0
ゴーヤドロップ 76 58 0
E4クリア 181 72 63
飽きた 301 84 77

ボス到達率

  • トータル:66.78%
  • E4クリア以降:75.00%

戦闘評価

トータル
評価
S 2
A 7
B 742
C 65
D 186
合計 1002
勝率 74.95%

E4クリア後
評価
S 0
A 1
B 346
C 31
D 48
合計 426
勝率 81.46%