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]

7月 112013
 

同じコピー元ディレクトリにexamplefilename.txtexampl~1.txtというファイルがある場合、コピー先で同一視されて上書きとなり、いずれかのファイルがコピーされないという問題。

8.3形式を無効にすることで回避可能。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation1にすれば無効となる。

6月 142013
 
現象
  • Windows Server 2003 R2 SP2
  • 起動中に「システム スタートアップの最中、少なくとも1つのサービスまたはドライバにエラーが発生しました。」というエラー
  • イベントビューアには以下のエラー
    • ソース: Service Control Manager
    • イベントID: 7000
    • 説明: パラレル ポート ドライバ サービスは次のエラーのため開始出来ませんでした:
      指定されたサービスは無効であるか、または有効なデバイスが関連付けられていないため、開始出来ません。
原因

パラレル ポート (Parport) サービスが有効になっているが、パラレル ポートが接続されていない場合に発生することがあります

参照:パラレル ポートを搭載していない Windows Vista ベースまたは Windows Server 2008 ベースのコンピュータでエラー メッセージ "パラレル ポート ドライバ サービスは開始できませんでした" が表示される

回避策

上記URLの通り、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Start3に変更し、Parport サービスを無効にする事で回避可能

6月 142013
 

メモリ要求が行われず、スタートアップRAMのままの容量となってしまう。

Hotfixが提供されている。

参考:Hyper-V の動的メモリ構成ガイド

4月 222013
 

ドメイン使用時、「このワークステーションとプライマリ ドメインとの信頼関係に失敗しました。」というエラーメッセージでログオンできなくなることがある。

上記通り、

  1. ローカルユーザーでログオン
  2. ドメインから脱退し、ワークグループに変更
  3. ドメインに再参加

という手順で対応可能。

3月 132013
 

管理特権がないとダメらしい。
VisualStudioでのデバッグ実行時などはVisualStudioを[管理者として実行]すればOK。

3月 132013
 
---------------------------
サーバーに接続
---------------------------
'EXAMPLE' に接続できません。サーバーが別のポートを使用しているか、別の SSL (Secure Sockets Layer) 設定を使用している可能性があります。
---------------------------
再試行(R)   キャンセル   
---------------------------

こうなる問題。

単に管理権限がないとこういうエラーになる模様。
紛らわしい…

ログオンユーザーをWSUS AdministratorsかAdministratorsに登録れすばOK。