C#のPartialクラスの罠

罠?

大げさな!

ただの部分クラスだぜ?はあ?

って感じでしょうとも。ああそうさ。

 

開発中のメモ書きです。

あまり時間を取れないのでザックリと書きます。

同じような現象でお悩みの方々に共有できたら幸いです。

…居らんか?ググってもわからんかったし。

まあ、答えはタイトルに書いていますが…

現象はこうだ

現在の現場で、製造フェーズにて絶賛タスクを消化中です。

環境はASP.net MVC SQLサーバー。普通です。

とにかく全体的な共有のプロジェクトのアウトラインとかは自分が用意したので

個人レベルでは比較的自由にコーディングしています。

とにかくEntityFrameworkや類似の機能のフレームワークでもそうだけど、

Linqでテーブルを結合してまるっと取ってくるのはめんどくさい。

式を組んでいるだけでわけわからんようになる。

ソースは上げたいけど今は無理なのでテキストだけですいません。察してください。

結局、生でクエリを流して、自前のモデルにセットして取ってくる、という風にしました。

その後、チーム内で不思議な不具合が発生します。。。

コードファーストなので、DBテーブルとそれを取得するためのエンティティクラスがあるのですが、そのプロパティに該当しない別テーブルのフィールドが含まれていて、

「コマンドが発行できない」的な例外が発生します。そんなフィールドうちにはねえ!というね。

データ取得&ビューモデル用に既存のエンティティクラスを継承して、追加のプロパティを追加したクラスをLinqで結合してインスタンスとして取得する、という処理を当初書いていたので「こりゃあどうもオイラが原因かな…」とは思っていましたが、

SQLを直接実行するように変更したので、何かのキャッシュか何か残っていて(曖昧)

SQLサーバを再起動とかしたら治るんじゃないの?ってその日は帰りました。

次の日…

あれれ、同じじゃないの?なにこれ?休み前にわけわからん現象ヤダヨ!

ってなっていました。

ちょっと半日くらいハマって、結果よくみたら継承もとのエンティティクラスが「Partial」で、

コンパイル時に継承した内容ともども合体していたので

「そんなフィールドはねえ!」ってなっていました・・・・

なんじゃそりゃ?

大体原因は自分で解決したのも自分ですが

なんとなく皆さんに謝りました。すいません。

どこに罠が潜んでいるかわかりませんな。まったく!