1

流れるような API を使用して、既存のデータベースを POCO クラスにマップしようとしています。1対多および多対多の関係ではすべてがうまく機能しますが、私が試した無数のオプションでは1対1は失敗します.

SQL テーブルは単純でAgentAgentIDas PK およびas PK と column を使用しAdditionalAgentInfoます。にはありませんが、テストデータベースにこれを追加して、これで問題が解決するかどうかを確認しました。AdditionalAgentInfoIDAgentIDAgentAdditionalAgentInfoID

すべての投稿は、次のことを指摘しています。

        pModelBuilder.Entity<Agent>()
              .HasOptional(u => u.AdditionalAgentInfo)
              .WithRequired(x => x.Agent);
        pModelBuilder.Entity<AdditionalAgentInfo>()
        .HasRequired(u => u.Agent)
        .WithOptional(x => x.AdditionalAgentInfo);

コンテキストが読み込まれますが、Agent.AdditionalAgentInfo常に NULL です。プロファイラーを調べると、SQL は間違った列に結合しようとします。

FROM [dbo].[AdditionalAgentInfo] AS [Extent1]
WHERE [Extent1].[AdditionalAgentInfoID] = @EntityKeyValue1

そのはず :

FROM [dbo].[AdditionalAgentInfo] AS [Extent1]
WHERE [Extent1].[AgentID] = @EntityKeyValue1

だから私は追加しようとしましMap(x=>x.MapKey("AgentID")たが、列の重複エラーが発生します。

何が欠けていますか?

4

1 に答える 1

0

これは、EF が共有 PK の 1 対 1 マッピングのみをサポートするためです。PK はテーブルへのAdditionalAgentInfoFK でもある必要がありAgentます。それ以外の場合は、1 対多の関係としてマップし、manyend プロパティを無視する必要があります。

于 2012-08-21T00:34:37.670 に答える