いろいろありまして Entity Framework 4 など触り始めてみました。
今のところ、情報があまりあるという状況では無さそうな感じですので、手さぐりで何とか進めてる状況であります。
そんな中で調べて分かったことメモなど。。
まずは Scott Guthrie 氏の翻訳記事から目を通す。
で、SQL Azure Team Blog でよさげなビデオもあるのでそちらも参照。
さてなんとなく何したらいいのか分かってきたので、実際にテーブル作って Entity Framework 4 でコーディングしてみようってことで。
まずDBでも作るかね~。今回はいろいろありましてキーとなる列は uniqueidentifier 型を使って挿入時に自動GUID発行とかしようと思いまして、そのように(既定値にNEWID()を指定して)定義。
その後 Visual Studio でDBからモデルを作成。
全く問題なし。
んでは早速コードでエンティティ作ってコンテキストに追加して SaveChange っと…
どれDB側見てるかね → uniqueidentifier 列に自動でGUID入ってねぇぇぇ\(^o^)/
いろいろ見てると、モデル作った後、プロパティで StoreGeneratePattern を Identity にしないといけないとかなんとか。
ふーん。なるほどそういうのが必要なのね。ということで設定して再実行 → やっぱかわらねぇえええ\(^o^)/
よく見たら外人さんも Whaaaaaaaaa??! って言ってたw
さてよくよく見てみると、件のプロパティを設定することで作成されたモデルのファイル (.edmx ファイル) のCSDL側には annotation:StoreGeneratedPattern=”Identity” が設定されてましたがSSDL側の定義には追加されてませんでした。
てことで StoreGeneratedPattern=”Identity” を追加 → (∩´∀`)∩ ちゃんと自動でGUIDが生成されて新規レコードできたよー!いやー @LeeDumond さんありがとう。
さて次は…更新系はエンティティのプロパティいじって SaveChange したらOKね。ふむふむ。
あとレコードが更新された日付は持っておきたいけど、いちいちコード側で入力するのは面倒だな → じゃ DateTime 型で既定値は GETDATE() で。
挿入と更新のときに処理するには StoreGeneratePattern に Computed を指定すればいいのね。あとさっきの教訓で .edmx ファイルも修正してと。 うん挿入時に自動で日付入りますね。じゃ更新は… Whaaaaaaaaaaa?!?
なんか更新時に自動的にしたかったらトリガー使えだと…とりあえずそうするか、ということでトリガー作りました。。。
うーん、合ってるかどうかわからない。
でも止まれないので次行きます。
次はトランザクションとロールバックですね。よさげなQ&Aが StackOverflow にありましたのでそちらを参考に TransactionScope() を使ってと。(なんかEJBで似たようなことしたなぁと、ふと思った)
よし、期待する動作になったのでトランザクションもOKっと。
さて次につぶしておきたいのが一括更新系の処理ですね。なんかLINQは一括更新系が苦手とかちらっと見たので、ストアドとどっちがいいのかぼやいてたら @onos さん、 @isisaka さん、@Chuki さん、@twit_ahfさんにいろいろアドバイスもらいました。ありがとうございます。サブクエリがあるならストアドで一発で!というありがたいお言葉。ためになります。
で、さっそくストアド作ろうかと思ったのですが、おいらストアドさっぱり…思考停止になったのとタイムアップで今日はおしまいとしました。ふぅ。
あとあと考えて @shibayan さんが Entity Framework の記事書いてたなーと思い見てるところです。
まだまだ見始めたばっかりなので用語もあやふやだし、”慣れてない”感ばりばりではありますが、ちゃんと理解するとこんなおいらでもDBアクセスができる!と思ってわくわくしてます。
今回まだCTPってこともあってコードファーストは見送ったんですが、こっちもどこかでちゃんと見てみたいですね~。(DBから入るよりは性にあってる)
モデル周りが前に進みそうなので、やっと次が見えてきました。 Azure への道はあとどれぐらいなんだろうw
ピンバック: .NET Clips