2012-04-10 17 views
10

パブリケーションから継承するImageというエンティティタイプがあります(他に5種類のパブリケーションがあり、共通プロパティは10種類あります)。継承されたエンティティタイプのテーブル分割?

残念ながら、私のDB内の画像テーブルは、異なる解像度で画像の4つのバージョンのデータと4つのバイナリ列を含むので、EF画像タイプの4つの特性がある:含有BinOriginal、BinHiRes、BinLowRes、BinThumbnailは、非常に大量のデータ。

これはパフォーマンスに影響します。たとえば、一連の画像リンクを生成しているときに、バイナリデータをすべて取得する必要はありません。

だからAラ新しい画像ファイルの実体に4つのバイナリフィールドを配置すること、テーブル分割を試みた:http://blogs.msdn.com/b/adonet/archive/2008/12/05/table-splitting-mapping-multiple-entity-types-to-the-same-table.aspx

Iは、正しいテーブル・マッピングを確保1-1アソシエーションを添加し、含まれてきました参照制約が、私はこのエラーを取得しています:

Error 3033: Problem in mapping fragments starting at line 2731:EntitySets 
'ImageFiles' and 'Publications' are both mapped to table 'Images'. Their primary 
keys may collide. 

...テーブルという分割が継承関係に関与していることに問題があるようです。

私はパブリケーションから新しい画像ファイルEFタイプを継承しようとしたが、その後、私はエラーを取得する:

Problem in mapping fragments starting at lines 2332, 2374:Two entities with 
different keys are mapped to the same row 

QUESTIONは、この周りに方法はありますか、私はイメージの必要があるという事実を行いますパブリケーションから継承するEFタイプは、他のフィールドを新しいタイプに分割することを排除しますか?

+1

データベーススキーマを変更できますか?私。イメージのための別のテーブルを作る? –

+0

はい:これは私が「回避策」として行っていることです(実際にはより良いDB設計ですが、DBはすでに稼動中であるため、もっと多くの作業が必要です)。テーブル分割についての私の質問は依然として立っています。それはまだ私が理解したいEFの側面です。継承関係のサブタイプであるテーブルを分割することができないことを確認/文書化できれば、回答を受け入れるだけで十分です。 – Faust

+0

わかりましたが、私はそれについて掘り下げるかどうかはわかりません:)。 –

答えて

1

これはEntity Frameworkの制限と考えることができます。実際には、基になるデータベース項目のモデルとモデルから構築されたエンティティの2つの部分があります。エンティティのサブクラスはモデルに何ら影響を与えません。

あなたがモデルの行のデータのすべて、プロジェクトにロードしたくない場合は、次の

var results = from product in myDB.Products 
       where product.Id == productId 
       select New 
       { 
        Id = product.Id, 
        Name = product.Name, 
        ImageUrl = product.ImageUrl 
       }; 

Entity Frameworkのが唯一のselect句で列を選択作成するSQLクエリLINQクエリ。

これはまた、Entity Frameworkがテーブル行をObjectContext(またはEF 5の場合はDBContext)オブジェクトに格納しないようにします。

私は個人的には、大規模なバイナリデータをNoSQLソリューションに格納し、SQLデータベースに関連するキーをそのまま維持するように誘惑されます。

関連する問題