5

Visual Studio 2012 (C#) で MVC 3 と共に Entity Framework 4 を使用しています。

最初にデータベースを使用しています。それぞれ独自の名前空間と 2 つの別個の edmx ファイルを持つ 2 つの別個のデータベースがあります。各データベースには、同じ名前とフィールド (ただし内容は異なる) を持つテーブルがあります。2 番目のテーブルを追加すると、コンパイル エラーが発生し始めました。

Ambiguity between 'Interface.CodeFormStatus.FormStatusCodeID' 
and 'Interface.CodeFormStatus.FormStatusCodeID' 

いくつかの複雑な回避策があるようです。または、テーブルの 1 つの名前を変更することもできます。これはかなり一般的な問題である必要があるため、簡単な解決策はありませんか。

4

3 に答える 3

7

2 つのデータベース (一方は他方の古いバージョン) があり、両方を 1 つのプロジェクトに統合する必要があるという状況に遭遇しました。当然、ほとんどすべての名前が競合しました。

データベースごとに 2 つの別個の edmx ファイルを作成し、わかりやすくするためにそれぞれを独自の名前空間に配置しました。次に、各エンティティ名を編集して、それがどのデータベースからのものかを反映させました (たとえば、両方にあった「Activities」は「v13Activities」と「v14Activities」になりました)。

両方のデータベース間でミラーリングされる操作のために、両方のコンテキストを含むラッパーを作成しました。これにより、コードの繰り返しが少なくなり、同期の問題も少なくなりました。

このアプローチが誰かの役に立てば幸いです。

更新: EF 6.1 以降では、別の解決策があります。「競合する」名前を持つことができ、「Code First From Database」オプションを使用すると、単純な名前空間でそれらを分離できます。古い XML .edmx スタイルは EF Core から段階的に廃止されるため、今後はこのソリューションを推奨します。

于 2014-12-23T21:14:32.930 に答える
2

同じ名前のテーブルが多くない場合は、デザイナー (.edmxファイル) でエンティティ名を編集できます。そのため、いずれかのエンティティの名前をダブルクリックして、CodeFormStatus別の名前に変更します (たとえば、 に変更しますCodeFormStatusOther) 。

于 2012-09-26T11:02:04.507 に答える