3

私はEFデータベースファーストを使用しています。データベースには、あるテーブルから別のテーブルへの多くの fk があります (同じ)。モデルを生成するとき、EF はもう一方の端のテーブル名をロール名として使用します。これは問題です。問題を説明するために、以下に小さな例を作成しました。

生成されたコードで、テーブル名の代わりに fk-name を使用したいと考えています。VS が生成しているモデルは、次のように機能するようになりました。

aTrip.Location
aTrip.Location1
aTrip.Location2

したいとき

aTrip.coming_from
aTrip.arrives_to
aTrip.next_dest

これで、VS でロール名を変更できます。問題は、再インポートするとすべての変更が失われることです。また、私たちのデータベースにはこの例のような多くの fk が含まれているため、面倒な名前変更がたくさんあります。

私が望むのは、VS がモデルを生成する方法を変更し、fk の col 名を使用することです。これははるかに正確です。それはできますか?

+----------------+                   +-------------+
|    Trip        |                   |Location     |
+----------------+                   |             |
|                |                   +-------------+
|                |                   |  Name       |
|                |*                 1|             |
|   coming_from  ---------------------             |
|                |                   |             |
|                |                   |             |
|                |*                 1|             |
|   arrives_to   ---------------------             |
|                |                   |             |
|                |                   |             |
|                |*                 1|             |
|    next_dest   ---------------------             |
|                |                   |             |
+----------------+                   +-------------+
4

1 に答える 1

0

この質問が古いことは知っていますが、偶然見つけて意見を述べたいと思いました。

現在、データベースをモデルにインポートする際の外部キーのデフォルトの命名の変更に関する特定の質問に答える方法がわかりません。方法があるかもしれませんが、私はそれを知りません!誰かがそうするなら、それを求めてください、私もそれを聞きたいです。

ただし、この状況で私が行うことは、データベースでどのように変更が行われているかを確認することです。これはセットアップに合わないかもしれませんが、データベースがこの 1 つのアプリケーションからのみ使用される場合は、データベース優先からモデル優先に移行できます。

データベースから最初にインポートしてモデルを生成した後、モデルをデータベースの元のソースにし、そこですべての変更を行い、それに応じてデータベースを更新します。これは、リレーションシップの名前を好きなように変更できることを意味し、データベースが変更されるたびにそのタスクを繰り返す必要はありません。

あなたの状況がそれよりも複雑な場合、これは少しも当てはまらないかもしれませんが、一部の人にとってはオプションかもしれないことを完全に理解しています.

もちろん、いつでもさらに一歩進んでモデルをコード ファーストで定義することもできますが、それは私が個人的に好んで使用する方法ですが、それは単なる私の意見です!

于 2013-08-07T14:19:02.663 に答える