BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース .NET 4.0におけるLINQ to SQLの変更点

.NET 4.0におけるLINQ to SQLの変更点

ブックマーク

原文(投稿日:2009/6/2)へのリンク

MicrosoftのData ProgrammabilityであるDamien Guard氏はLINQ to SQLについて長めの変更点一覧を投稿した。今後、彼らは主にEntity Frameworkの開発に係わる一方で、この変更点一覧はLINQ to SQLの開発が完全に止まる恐れを緩和してくれている。

パフォーマンス

  • テキストパラメータ長を明確に定義する事で、問い合わせ計画の再利用性が向上する。
  • IDキャッシュの主キーに対する単一結果の検索として、query.Where(predicate).Single/SingleOrDefault/First/FirstOrDefaultらのメソッドを追加する。
  • DataLoadOptions(ベータ1以降では、キャッシュ検索はDataLoadOptionsの値を考慮している)を有効にした場合、クエリの実行についてオーバーヘッドが軽減する。

ユーザビリティ

  • モック化を可能とする為、ITableインターフェースを追加。
  • 列挙型を含むContainsメソッドは、列の型に対応したint型やstring型に自動的にキャストされる。
  • 更新処理について、主キー以外の列に対しても関連の指定が可能になった。
  • クエリについて、リストの初期化処理をサポート。
  • LinqDataSourceは継承されたエンティティをサポート。
  • LinqDataSourceは追加されたDynamic Data問い合わせのエクステンダをサポート。

クエリの安定性

  • ContainsメソッドがIQueryableインターフェースの自己参照を検知可能となり、スタックオーバーフローの原因とならない。
  • Skip(0)は即時読み込みを保障する物ではない。
  • GetCommandがSQL Compactのトランザクション内で使用される。
  • プロパティやフィールドにリンクをさらす事が正しく検出される。
  • コンパイル済みクエリは、マッピングされたソース内の変更を正確に検知し、実行される。
  • String.StartsWith、String.EndsWith、String.Containsメソッドが検索文字列内で ~ を正しく取り扱える。
  • Multiple active result sets (MARS)の検出が改善された。
  • Table-Valued Functions (TVFs)で即時読み込みを使用している場合、エンティティ間での関連は適切に生成される。
  • スカラ射影を伴う副問い合わせを含むクエリ式の動作効率が向上した。

更新処理の安定性

  • SubmitChangesがトランザクションロールバック例外を暗黙的に消滅させない。
  • 変更が衝突した場合でも、SubmitChangesがtimestampを適切に処理する。
  • IsDbGeneratedは、名前変更されて元の列名と一致しないプロパティについても取り扱える。
  • サーバ生成済み列、SQLレプリケーション/SQLトリガがSQL例外を投げる事無く動作する。

一般安定性

  • デシリアライズ処理後でも、バイナリ型が一致する。
  • 読み込んでいないエンティティセットに項目追加した場合でも、EntitySet.ListChangedイベントが実行される。
  • コンテキストの処理中に関連を処理する(入力されたものはデタッチされる)。

SQL Metal

  • 外部キープロパティのsetterは、影響を与える全ての関連に対して初回以外にもチェックを行う。
  • 主キーの型がサポートされていない場合でのエラーハンドリングが改善された。
  • テーブル値パラメータを含むストアドプロシージャに対して、プロセスを終了させることなくスキップ可能になった。
  • AttachDbFilename構文を用いた接続に対しても使用可能になった。
  • 予期しないデータ型に対してもクラッシュしなくなった。

LINQ to SQLクラスデザイナ

  • SQL結果セット中で、単一の匿名カラムが取り扱われる。
  • null許容したユニーク列の関連について、エラーメッセージの改善。
  • ユーザ側のパーシャル・クラスに対して、使用しているSQL句が追加された場合でも失敗しない。
  • VarChar(1)が文字型でなく文字列型に正確にマッピングされる。
  • DbType属性を用いた場合でも、Decimal型の精密性とスケールはストアドプロシージャに対して正確に適用される。
  • 再起動なしでテーブルをデザイナに適用した場合でも、外部キーの変更が取得される。

コード生成(SQL Metal + LINQ to SQLクラスデザイナ)

  • エンティティとコンテキストの名前空間が異なる場合でも、独自な値を使用したストアドプロシージャがコンパイルされる。
  • virtual internalが正しい文法で生成される。
  • ユーザ型を伴う属性のマッピングについて、衝突を完全に防止する。
  • KnownType属性は、継承を用いたDataContractSerializerに対して発行される。
  • 遅延ロードされる外部キーについて、コンパイル可能な形で正確にコード生成される。
  • エンティティとコンテキストの名前空間が異なる場合でも、並列実行可能なストアドプロシージャが使用可能。
  • 任意の関連が初回以外にロードされても、ForeignKeyReferenceAlreadyHasValueExceptionが投げられる。

この記事に星をつける

おすすめ度
スタイル

BT