5

Agent と AgentGroup の間に多対多の関係があります (疑似コード、省略形)。

public class Agent { 
    public virtual List<AgentGroup> AgentGroups { get; set; } 
}

public class AgentGroup { 
    public virtual List<Agent> Agents { get; set; } 
}

コードのある時点で、すべての AgentGroup を取得し、各グループのエージェントをプリフェッチ/インクルードしたいと考えています。また、エージェントの AgentGroups コレクションを事前に入力したいと考えています。これは EF 6 ベータ版では機能していましたが、EF 6 rc1 では機能しなくなりました。

List<AgentGroup> allGroups = context.AgentGroups.Include("Agents").Include("Agents.AgentGroups").ToList();

私が得るエラーメッセージは

オブジェクト名 'dbo.AgentAgentGroups' が無効です。

実際、テーブルはありません。AgentAgentGroupsテーブルはdbo.AgentGroupAgentsです。これを再び機能させるためのアイデアはありますか?

現在、注釈はなく、流暢な API を使用していません。これはすべて、厳密にはデフォルトのコード ファーストの規則です。

4

1 に答える 1

6

rc1 では、多対多の関連付けにおけるジャンクション テーブルの命名規則が変更されているようです。モデルをさまざまな EF バージョンで試すと、次のようになります。

  • EF5 (安定):AgentGroupAgents
  • EF6 (ベータ):AgentGroupAgents
  • EF6 (rc1):AgentAgentGroups

ベータ版が異なっていても問題ありませんが、rc1 が前回の RTM バージョンと異なるため、これは重大な変更になります。よく釣れます!

編集

EF チームからの回答:

こんにちは
。EF6 より前は、非決定論的なモデル作成の領域がいくつかありました。x86 で実行しているか x64 で実行しているかによって、異なるモデルを取得できました。多対多結合テーブル名は、これらの領域の 1 つでした。EF6 では、結果が常に同じになるようにこれに対処しました。残念ながら、これは、一部のモデル (実行されているアーキテクチャによって異なります) では、EF6 にアップグレードするとモデルが変更される可能性があることを意味します。ただし、現在計算されているモデルは、マシン間および EF の将来のバージョン間で一貫性があります。元の名前を引き続き使用する場合は、Fluent API を使用して結合テーブル名を指定することをお勧めします。
〜ローワン

于 2013-09-20T09:45:35.320 に答える