6

既存のスキーマに対して EF を使用して評価しています。問題は、外部キーがマスター テーブルの主キーではないテーブル間の関連付けを設定する方法がわからないことです。

例として、 aは次のように定義されたものfooをいくつも持つことができます(疑似コードを許してください):bars

table foo {
  int foo\_id pk,
  char(10) foo\_code,
  ...
}

table foobar {
  int bar\_id pk,
  char(10) bar\_foo\_code fk(foo.foo\_code),
  ...
}

foo_foobar関連付けを作成できるようにするために何が欠けているので、エンティティのBarsナビゲーション プロパティはありますか?Foo

4

1 に答える 1

3

エンティティへの Linq は、テーブルの主キーを指していない外部キーをサポートしていません (ログ メッセージ 3 を参照)。エンティティへの Linq は、それをテーブルの通常のフィールドとして扱います。リンク先のエンティティに移動することはできません。

既存のスキーマがある場合は、edm ジェネレーターを使用することをお勧めします。これにより、EMDX ファイル、コード ビハインド、さらにはビュー コード (非常に大きくなる可能性があります) が作成されます。既存のスキームが非常に大きい場合は、大規模なスキーマを処理する方法を説明しているこの投稿を確認してください。

EDM Generator を実行すると、サポートされていないことがすべてわかります。

以前の EDMGen2.exe ログを見ると、次の種類のメッセージが返されました。

  1. データ型 'sql_variant' は
    サポートされていません。テーブル 'TableName' の列 'ColumnName' は除外されました。
  2. テーブル/ビュー 'tableName' には主キーが定義されていません。キーは推測され、定義は読み取り専用のテーブル/ビューとして作成されました
  3. リレーションシップ 'RelationshipName' には、サポートされていないリレーションシップのプライマリ側のテーブルのキーの一部ではない列が含まれています。リレーションシップは除外されました。

また、EDM によって生成されたコード ファイルが 80 MB をはるかに超えていたため、Linq プロジェクトが実際に Visual Studio をかなり頻繁にクラッシュさせたこともわかりました。

于 2009-03-12T13:32:04.353 に答える