1

次の場合を考えてみましょう。3つのテーブルがあります

LampPost, columns: Id (PK, int), StreetId (FK, int)
Street,   columns: Id (PK, int), CityId (FK, int)
City,     columns: Id (PK, int), Name (varchar)

通常のケースでは、都市ごとに多数(数万)の街灯柱があります。たとえば、LampPost管理システムを作成していて、LampPostを都市でフィルタリングできるようにしたいとします。しかし、Cityテーブルについて私が知っているのは、上記の2つの列が含まれていることだけです。あるサーバーでは、私が気にしない追加の列があるかもしれません。そして、同じことがテーブルストリートにも当てはまります。

現在、データモデルにはすべてのテーブルがあり、などのクエリが可能ですがcontext.LampPosts.Where(lp => lp.Street.City.Name == "Paris")、テーブル全体に影響を与えることなく、これを実現する別の方法が本当に必要です。

また、データモデルにテーブルを追加して(最初にデータベースを使用し、.NET4.0ではEF5を使用しています)、不要な列を削除しようとしましたが、EFはマップされていない列について不平を言いました。

これは、ストアドプロシージャまたはある種のexecutequery呼び出しのいずれかで実行できると確信していますが、どちらもよく知らないので、皆さんにお願いします。これを実行するための最良の方法は何でしょうか。

4

1 に答える 1

1

1 つの方法は、テーブルのビューを作成し、必要な列のみを選択することです。次に、ビューをデータ モデルに取り込むことができます。

たとえば、Citytalbe が次のようになっているとします。

City (Id, Name, State, Population, Area)

次のようにビューを作成します。

CREATE VIEW CityView AS
SELECT Id, Name FROM City

そして、Street次のように見える場合:

Street (Id, Name, CityId, Length, Width)

(列はデモンストレーション用です)

次のようなビューを作成できます。

CREATE VIEW StreetView AS
SELECT Id, Name, CityId FROM Street

エンティティ間を移動するために必要なすべての列が利用可能です。

于 2013-02-28T09:21:31.097 に答える