1

これが私のシナリオです:

public class Contact 
{
    public Guid ContactId { get; set; }
    ........
    public Guid WorkspaceId { get; set; }
    public Workspace Workspace { get; set; }
}

public class Workspace
{
    public Guid WorkspaceId { get; set; }
    ........
    public ICollection<Contact> ReferencedContacts { get; set; }
    public ICollection<Contact> OwnedContacts { get; set; }
}

ロジックは次のとおりです。連絡先はワークスペース外に存在できません (ワークスペースが連絡先を所有していることを意味します)。ユーザーにはワークスペースがあり、そこに「所有されている連絡先」が配置されます (所有されている連絡先 = 職業、名前、住所などのユーザーを説明する連絡先情報)。また、ユーザー ワークスペースは、他のユーザーが所有する連絡先への参照を保持できます (ここに、ワークスペースと参照先の連絡先との関係を格納する結合テーブルがあります)。

public WorkspaceMap()
{
    ....
    HasMany(w => w.ReferencedContacts).WithMany().Map(mp =>
    {
        mp.ToTable("WorkspaceReferencedContacts");
        mp.MapLeftKey("WorkspaceId");
        mp.MapRightKey("ContactId");
        });
}

public ContactMap()
{
    ......
    HasRequired(c => c.Workspace).WithMany(w => w.OwnedContacts).HasForeignKey(c =>   c.WorkspaceId).WillCascadeOnDelete(false);
    Property(c => c.WorkspaceId).HasColumnName("WorkpaceId");
}

私がやろうとしているのは、クエリ メソッドを使用して、特定のワークスペースで参照されているすべての連絡先を取得することです。クエリの SQL バージョンは次のようになります。

SELECT * FROM dbo.Contacts c INNER JOIN dbo.WorkspaceReferencedContacts wc ON wc.ContactId = c.ContactId WHERE wc.WorkspaceId = '57F685C0-428C-44C3-8708-F30B5AF34CAE';

私は成功せずに多くの方法でアプローチしました。遅延読み込みが無効になっていることに注意してください (理由について議論する意味はありません...)

4

1 に答える 1

0

...特定のワークスペースで参照されている連絡先をすべて取得...

おもう:

var contacts = context.Workspaces
    .Where(w => w.WorkspaceId == "57F685C0-428C-44C3-8708-F30B5AF34CAE")
    .Select(w => w.ReferencedContacts)
    .SingleOrDefault();
于 2013-03-01T16:57:45.927 に答える