这是我的场景:
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';
我已经尝试了很多方法,但都没有成功。请注意延迟加载被禁用(没有必要讨论为什么......)。