2

私は3つ(将来的にはもっと多く)の大きなプロジェクトを持っていますが、それらはすべて共通しています(User、Role、 UserPreferences 、UserLog ...など)。これらの共通テーブルの変更とエンティティの変更は、常にすべてのプロジェクトに適用されます。

現在のところ、各プロジェクトには、プロジェクトごとにこれらのエンティティEDMX複製する個別のものがあります。これらの共通エンティティまたはテーブルに変更を加える場合は、同じ変更を3回複製する必要があります。

これらのエンティティを別々のプロジェクトで定義してからreuse、各プロジェクトで定義する方法はありますか?

これらの共有エンティティは、各プロジェクト内の他のエンティティ(各プロジェクトに固有の情報)と関係があることに注意してください。

私がやりたいのは、(私が知る限りでは不可能な)オブジェクトではなく、(別のEDMXからの)EDMXオブジェクトを参照することです。tables/views/sps

注: ADO.NETで古いブログをいくつか見つけましたが、これまでのところ、実際の解決策は見つかりませんでした。

4

2 に答える 2

1

共有リソース用の API を立ち上げると、これらを必要とする各プロジェクトが API を消費する可能性があります。共有リソースには、独自のプロジェクトと、これらのエンティティ用の 1 つの edmx があります。そうすれば、これらの共有リソースを常に 1 回変更するだけで、3 つすべてが更新されます。欠点は、現在のようにこれらの変更を一度に導入できないことですが、メンテナンスの容易さと重複コードの削減には大いに賛成です!

私は今、OData で同様のセットアップを行っており、うまく機能しています! もちろん、それは MS が発表する新しい Web API アーキテクチャよりも前のことです。ここに簡単なチュートリアルがあります ( http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api )

于 2013-01-09T21:00:26.810 に答える
1

異なる EF モデルのオブジェクト間で参照を作成することはできません。その理由は、EF が関連付けを SQL 結合として解決しようとするため、関連するすべてのクラスのマッピング情報が必要になるためです。

モデルをマージして、それらのクラス間の関連付けを定義することが可能であるべきだと想像できましたが、そうです....

したがって、edmx を使用する場合にできる最善の方法は、プロジェクトで両方のモデルを別々に使用し、必要に応じてインメモリ (オブジェクトへの linq) 結合を使用することです。残念ながら、最もパフォーマンスの高いソリューションではありません。

コード ファーストに切り替えることができれば、別のクラス ライブラリに共通のクラスを用意し、既製のEntityTypeConfigurationクラスを完成させて、それらをプロジェクトで使用することができます。次に、共通クラス ライブラリを参照し、型構成のインスタンスをDbContextローカル プロジェクトのクラスに追加するだけです。外部キーがローカル モデルの一部である限り、関連付けを共通クラスにマップすることもできます。(もちろん、共有クラスに外部キー フィールドを追加することはできません)。

于 2013-01-10T21:27:40.277 に答える