2012-01-04 10 views
1

この質問はおそらくかなり単純だと思いますが、私は検索してきて、私が探しているものを見つけることができませんでした。Entity Framework - データモデルにマップされていないテーブルを含む?

チームと私は、既存のWebアプリケーションに新しいモジュールを追加しています。私たちはすでにsql dbに接続されている既存のデータモデルを持っています。それはかなり巨大です...新しいモジュールのために、新しいモジュールの新しいテーブルをデータベースから直接新しいEFデータモデルを作成しました。これらの新しいテーブルは、私たちの既存のテーブルのいくつかを外部キーで参照していますが、それらのテーブルを追加すると、すべての外部キーがそのテーブルとそのテーブルとテーブルにマップされる必要があります。 。

私の質問は、データモデルに古いテーブルを追加するのではなく、外部キーの目的の既存のテーブルのIDを参照するだけなので、クラスのどこかで.Includes("old table")を実行するか、それらのテーブルをモデルに追加して、それらの関係をすべて削除しますか?あるいは私が気づいていない他の方法もありますか?

コードの不足のため申し訳ありませんが、これは特定の構文の問題ではなく論理的な問題です。

+1

パフォーマンスクリティカルなWebアプリケーションでは、EFを避けるようにしてください。 – garik

+1

私はこのアプリがパフォーマンスにあまりにも関わっているとは言わないでしょう。それは内部のみで、約20人の同時ユーザーが利用できます。プラスこれは本当にすべての私の質問に対処していません。 –

+0

と私はとにかくそれをdesputeだろう。もしあなたが懸念しているのであれば、パフォーマンスが特に懸念されるポイントでストアドプロシージャをEFに統合することができます –

答えて

2

単純な回答ではありません。モデルの一部ではないエンティティは含めることはできません(=現在のコンテキストで使用されているEDMXにはマッピングされていません)。

さらに複雑な答えがあります。非常に特殊なケースでは、開発プロセスを大きく変更し、EFとEDMXをどのように使用するのかを大きく変更する必要があります。すべてのEDMXファイルを手動でXMLとして管理する準備はできていますか?このような場合、EFは概念モデル全体を別のモデルで参照し、新しいモデルから古いモデルへの一方向の関係を使用する方法を提供します。複数の概念モデル(CSDL)、単一のマッピングファイル(MSL)、単一のストレージ記述(SSDL)、およびそれらのすべてを使用する単一のコンテキストを持つため、これはうんざりです。例としてthis articleを確認してください。

1

EF図の外のテーブルを参照するために使用することはできません。 EFで作業を開始するには、データベースの一部を含める必要があります。これは、最初のプロジェクトが別の機能領域を使用している場合に限ります。これは、レガシーデータベース全体をインポートしたときに、驚くべき混乱を招く可能性があります。私はそれをやろうとしたときに怖かったです。

同様の状況 - ストアドプロシージャを使用する大きなレガシーシステムでは、当時は直接作業していたテーブルだけを追加しました。後で必要に応じていつでもテーブルを追加することができます。含まれていないテーブルを参照しているEF図の外部キーは心配しないでください。 Entity Frameworkはこれにうまく対処します。

エンティティフレームワークと古いスタイルのデータアクセスの2つのビジネスレイヤを実行することを意味します。しかし私たちにとっては問題ではありません。実際、私がレガシーシステムのプログラミングについて読んだことから、おそらくこれは道のりです。あなたは、あなたの厄介な古いものとビジネスレイヤーと、あなたの輝く新しいものを持つビジネスレイヤーを持っています。ある日まで、古いビジネス層が蒸発して何もない状態になるまで、古いものから新しいものに移動してください。

+0

@Dylanは新しいモデルにないエンティティに対して 'Include'を使用したいので、問題は解決しません。 –

+0

フェア - 私はリンクをより明確にするために編集しました。それは回避策です –

0

メンバーの上に[Include()]を使用する必要があります。例えば

 // This class allows you to attach custom attributes to properties 
     // of the Frame class. 
     // 
     // For example, the following marks the Xyz property as a 
     // required property and specifies the format for valid values: 
     // [Required] 
     // [RegularExpression("[A-Z][A-Za-z0-9]*")] 
     // [StringLength(32)] 
     // public string Xyz { get; set; } 
     internal sealed class FrameMetadata 
     { 

      // Metadata classes are not meant to be instantiated. 
      private FrameMetadata() 
      { 
      } 
      [Include()] 
      public EntityCollection<EventFrame> EventFrames { get; set; } 

      public Nullable<int> Height { get; set; } 

      public Guid ID { get; set; } 

      public Layout Layout { get; set; } 

      public Nullable<Guid> LayoutID { get; set; } 

      public Nullable<int> Left { get; set; } 

      public string Name { get; set; } 

      public Nullable<int> Top { get; set; } 

      public Nullable<int> Width { get; set; } 
     } 
    } 

そして、LINQは

.Includes("BaseTable.IncludedTable") 

構文を持つ必要があります。

また、モデルの一部ではないエンティティでは、いくつかのビュークラスを作成する必要があります。

関連する問題